Apakah menjalankan pg_dump di live db menghasilkan cadangan yang konsisten?

37

Saya memiliki database 3GB yang terus-menerus dimodifikasi dan saya perlu membuat backup tanpa menghentikan server (Postgres 8.3).

Pg_dump saya berjalan selama 5 menit. Bagaimana jika data dimodifikasi selama proses? Apakah saya mendapatkan cadangan yang konsisten? Saya tidak ingin mencari tahu kapan bencana terjadi.

Dokumentasi Postgres http://www.postgresql.org/docs/8.3/static/app-pgdump.html tidak mengatakan apa-apa tentang ini.

Roma
sumber
4
Hai Roddick. Saya sangat merekomendasikan untuk menguji proses pemulihan Anda sebelum bencana terjadi. Siapkan mesin yang berbeda dan kembalikan menggunakan salah satu cadangan Anda untuk mengujinya.
Derek Downey

Jawaban:

53

Dari manual :

Itu membuat backup konsisten bahkan jika database sedang digunakan secara bersamaan.

Jadi ya, Anda bisa mempercayai cadangannya. Tentu saja, ini PostgreSQL, Anda dapat mempercayai data Anda dalam PostgreSQL.

Frank Heikens
sumber
10
Saya benar-benar LOL ketika saya membaca "Anda dapat mempercayai data Anda dalam PostgreSQL" :)
François Beausoleil
Tautan ke manual akan menyenangkan
Pablo Fernandez
1
@PabloFernandez: Selesai!
Frank Heikens
1
Namun cadangan logis pada database langsung akan mengunci tabel Anda, jangan lewatkan informasi ini. Mungkin Anda akan menemukan beberapa tips: compose.com/articles/…
tryp
Jadi tolong, apa yang lucu tentang itu? Haruskah saya berhenti menggunakan postgresql?
777Anon
12

pg_dump memulai transaksi, mirip dengan cara kerja kueri jangka panjang lainnya. Jaminan konsistensi berasal dari implementasi MVCC . Tempat sampah akan selalu konsisten dalam aturan tersebut.

Semua bagian fuzzy MVCC ada di sekitar hal-hal seperti apa urutan transaksi UPDATE menjadi terlihat oleh klien lain dan bagaimana kunci diperoleh. pg_dump sangat ketat tentang pemesanan dan mendapatkan kunci baca di seluruh basis data untuk membuangnya. Bagi kebanyakan orang, itulah yang mereka harapkan, dan mekanisme yang digunakan tidak pernah menimbulkan masalah. Risiko konkurensi utama adalah bahwa klien yang mencoba mengubah struktur basis data akan diblokir saat dump berjalan. Itu tidak mempengaruhi kualitas tempat sampah.

Greg Smith
sumber
11

Tumpukan dimulai dengan pengaturan TRANSACTION ISOLATION LEVEL SERIALIZABLE.

Silakan baca manual tentang Isolasi Transaksi dan misalnya diskusi Daftar Pengguna tentang ini .

Mengutip:

Cadangan hanya akan melihat transaksi yang dilakukan sebelum tingkat isolasi ditetapkan.

Pada dasarnya semua setelah pg_dumpmenetapkan tingkat isolasi transaksi bukan bagian dari dump ini.

Operasi baca / tulis tidak terpengaruh (dikunci) selama waktu itu.

Dennis Nolte
sumber
-1

Pertama, maaf karena menjawab utas lama ini. Tapi dari pengalaman saya, saya tidak bisa mengkonfirmasi pernyataan yang dapat Anda percayai pg_dump /

Saya beralih beberapa bulan lalu untuk sebuah proyek ke postgres. Dan tentu saja saya membuat semua backup dengan pg_dump dari sistem live seperti yang disarankan. Tetapi setelah pemeriksaan cadangan pertama saya menemukan bahwa semua kesedihan memiliki ukuran yang berbeda. Setelah mengembalikan beberapa dari mereka secara acak, saya menemukan bahwa beberapa tabel hilang. Jadi saya mulai menganalisis mengapa ini terjadi dan saya menemukan bahwa jika aplikasi overlay, mis. Server aplikasi, mengunci beberapa tabel dan pg_dump tidak menunggu sampai dirilis. Saya diperlukan setiap kali untuk menghentikan server untuk periode cadangan yang bukan solusi yang baik.

Jadi saya masih mencari perbaikan tetapi seperti yang saya katakan saya sangat tidak setuju dengan pernyataan bahwa Anda dapat mempercayai pg_dump.

Pete Porter
sumber
Jika itu terjadi, itu akan menjadi serius di pg_dump. Versi apa yang Anda gunakan? Pertanyaan saya adalah 3 tahun yang lalu, dan sekarang saya di 9.3 dan Amazon reds yang melakukan backup langsung tampaknya menggunakan pg_dump. Mereka tidak mungkin salah.
Roman
Anda dapat mempercayai pg_dump untuk melakukan pencadangan berseri (lihat jawaban saya untuk tautan / dokumen dan beberapa detail). Namun, selama bacaan saya, saya memang membaca bahwa Anda tidak boleh mengubah struktur DB itu sendiri, meskipun saya tidak dapat menggali lebih dalam tentang itu. . Karena kami hanya melakukan insert / update / delets saya tidak bisa mengomentari kreasi tabel. Bagi kami, saya hanya memastikan untuk tidak membuat tabel selama waktu pg_dump.
Dennis Nolte
2
Pernyataan Anda menunjukkan bug serius (apakah Anda mengajukan laporan bug?), Bug serius dalam cara Anda membuang database Anda atau beberapa kesalahpahaman. Kurangnya fakta yang tidak dapat diputuskan di antara ini.
dezso