Bagaimana PostgreSQL menangani Pos-pos Pemeriksaan di tengah cadangan yang diaktifkan-WAL?

17

Pada PostgreSQL v9.0 saya memiliki sistem pengarsipan WAL yang berfungsi. Jadi WAL mengajukan arsip yang diarsipkan (saat 3 WAL dibuat atau jika WAL lebih dari 15 menit).

Sekarang saya menambahkan paket biner dari direktori PG_DATA (tidak termasuk subdirektori pg_xlog). Untuk melakukan itu saya melakukan pg_start_backup(),salinan biner, dan a pg_stop_backup().

Saya rasa saya cukup mengerti apa yang dilakukan pg_start_backup dan pg_stop_backup, yang pertama membuat pos pemeriksaan dan yang terakhir memastikan file WAL terakhir diarsipkan.

Dari dokumentasi resmi kita dapat melihat bahwa untuk salinan data biner kita harus:

Lakukan pencadangan, menggunakan alat pencadangan sistem file yang mudah seperti tar atau cpio (bukan pg_dump atau pg_dumpall). Tidak perlu atau tidak diinginkan untuk menghentikan operasi normal dari database saat Anda melakukan ini.

Jadi saya cukup bingung. Ini berarti sebuah Checkpoint dapat dilakukan saat kami membuat salinan. Saya melihat banyak dokumentasi yang menyatakan bahwa perintah salin harus memungkinkan perubahan data saat melakukan salin, saya baik-baik saja dengan itu, simplya masalah menemukan alat yang tepat. Tetapi pertanyaan saya adalah bagaimana postgreSQL akan menangani pemulihan dengan konten pg_data yang berisi beberapa file yang tidak konsisten (beberapa dari sebelum pos pemeriksaan, beberapa dari setelah)?

Dengan memutar ulang log transaksi Postgresql akan dapat menempatkan semua file ini dalam keadaan yang benar? Saya melihat bahwa membuat tabel dan menjatuhkan operasi berbahaya saat cadangan berkinerja, Apakah tidak ada beberapa operasi berbahaya seperti vakum perintah ? Apakah pg_backup menunda operasi vakum? Haruskah saya membuat salinan file global / pg_control di akhir di awal proses salinan biner? Haruskah saya menggunakan sistem file yang diaktifkan snapshot (seperti dengan xfs-freeze) untuk mendapatkan proses pemulihan yang lebih cepat?

Saya melihat bahwa kerusakan skrip cadangan tidak akan meluncurkan pg_stop_backup secara otomatis, jadi ada kemungkinan kondisi cadangan saya hidup untuk waktu yang lama (hingga nagios saya berdering di suatu tempat untuk memperbaiki pg_stop_backup ()). Jadi jika ada sesuatu yang berbeda di PostgreSQL antara kedua perintah ini, saya ingin mengetahuinya, untuk memahami apa dampaknya.

Tolong beri saya pencerahan.

regilero
sumber

Jawaban:

7

Kamu bertanya:

bagaimana postgreSQL akan menangani pemulihan dengan konten pg_data yang berisi beberapa file yang tidak konsisten.

pg_start_backup()memastikan file data setidaknya sama baru dengan pos pemeriksaan. Saat pemulihan, log diterapkan.

Jika datanya sudah tua, log akan memperbaruinya ..

Jika datanya baru, log akan memiliki konten yang sama. Tidak ada salahnya menulisnya lagi.

Data tidak pernah lebih baru dari log, karena log ditulis di depan (WAL).


Kamu bertanya:

... xfs-freeze...

xfs-freezesama pg_start_backup(), tidak mengambil snapshot. Anda memerlukan manajer volume untuk melakukan itu.


Kamu bertanya:

... mengapa membuat tablespace & membuat pernyataan basis data tidak didukung jika WAL dapat memutar ulang semuanya?

Didukung, hanya sedikit gotcha. Lihat http://www.postgresql.org/docs/8.1/static/backup-online.html :

23.3.5. Peringatan

Perintah CREATE TABLESPACE adalah WAL-log dengan path absolut literal, dan karena itu akan diputar ulang sebagai kreasi tablespace dengan path absolut yang sama. Ini mungkin tidak diinginkan jika log sedang diputar ulang pada mesin yang berbeda. Ini bisa berbahaya bahkan jika log sedang diputar ulang di mesin yang sama, tetapi ke direktori data baru: replay masih akan menimpa isi tablespace asli. Untuk menghindari potensi gotcha semacam ini, praktik terbaik adalah mengambil cadangan basis baru setelah membuat atau menjatuhkan tablespace.

J-16 SDiZ
sumber
tentang xfs-freeze Saya tahu ini tergantung juga pada manajer volume, itu hanya sebagian dari prosedur pengambilan gambar. tetapi apakah kami yakin pemulihan WAL akan menangani dengan baik replay log tabel pra-vakum pada tabel biner pasca-vakum? dan apakah konten global / pg_control penting? mengapa membuat tablespace & membuat pernyataan database tidak didukung jika WAL dapat memutar ulang semuanya?
regilero
CREATE TABLESPACEbekerja. lihat jawaban yang diperbarui. Saya tidak yakin VACUUM, tapi saya tidak bisa membayangkan mengapa itu tidak terjadi.
J-16 SDiZ