PostgreSQL: Keadaan konsistensi Dump tanpa mengunci

2

Cadangan basis data yang baik konsisten, sehingga seluruh dump mewakili kondisi saat dumping dimulai. Strategi khas untuk ini di MySQL adalah mengunci tabel, sehingga tidak ada data tambahan yang dapat ditulis selama cadangan. Tetapi mengunci basis data adalah pengalaman pengguna yang buruk (respons lambat atau bahkan timeout, jika dump membutuhkan banyak waktu). Jadi saya bertanya-tanya, apakah Postgres memiliki metode untuk membuat cadangan yang konsisten tanpa mengunci tabel.

(Strategi cadangan saya saat ini dengan MySQL adalah memiliki budak hanya untuk cadangan, sehingga master dapat terus melayani permintaan pengguna sementara saya dapat mengambil dump yang konsisten. Tapi itu memperkenalkan titik kegagalan lainnya, misalnya replikasi mungkin rusak)

iGEL
sumber

Jawaban:

1

mengunci dan mengunci adalah dua hal yang berbeda. Beberapa kunci tidak menyebabkan masalah sama sekali dan Anda dapat menggunakan database seperti biasa (kunci berbagi akses), sementara kunci lainnya memiliki dampak besar dan menghentikan bisnis Anda.

Cara paling sederhana untuk membuat cadangan dari database PostgreSQL, adalah pg_dump . Kami membuat cadangan harian dari basis data multi TB, selama jam kerja pemrosesan pada ~ 2500 tps.

Jangan bandingkan PostgreSQL dengan MySQL, dua database yang sangat berbeda. Banyak masalah yang sulit diperbaiki di MySQL sangat sederhana di PostgreSQL. Membuat cadangan yang konsisten adalah salah satunya.

Anda tidak perlu seorang budak untuk membuat cadangan. Ini berguna, tetapi tidak diperlukan.

Frank Heikens
sumber
0

Menjalankan PostgreSQL melalui ZFS dan mengambil snapshot langsung harus menyelesaikan masalah ini.

Tentu saja snapshot itu akan memiliki log transaksi kotor, jadi Anda harus mempromosikan snapshot ke klon (snapshot yang dapat ditulis), kemudian jalankan instance PostgreSQL yang terpisah untuk menghapus / memutar ulang log, dan kemudian melakukan dump dari instance kedua. Akhirnya, Anda harus mematikan instance server database kedua dan menghapus klon.

Jika Anda tidak memiliki cukup RAM untuk menjalankan dua contoh PostgreSQL pada server produksi, maka Anda dapat mentransfer snapshot database ke server sekunder (dengan zfs kirim, zfs menerima) dan melakukan dump di sana.

Mikhail Kupchik
sumber