Saya memikirkan apa yang Anda tulis dan inilah beberapa ide untuk Anda:
- Jika Anda membutuhkan backup yang benar-benar konsisten untuk beberapa waktu maka Anda harus menggunakan pg_basebackup atau pg_barman (secara internal menggunakan pg_basebackup) - penjelasannya ada di 1. tautan di bawah. pg_basebackup 10 terbaru mengalirkan log WAL sehingga Anda juga mencadangkan semua perubahan yang dilakukan selama pencadangan. Tentu saja pencadangan ini hanya membutuhkan seluruh instans PG. Di sisi lain itu tidak mengunci meja apa pun. Dan jika Anda melakukannya dari instance jarak jauh maka itu hanya menyebabkan beban CPU kecil pada instance PG dan disk IO tidak sebesar yang disarankan beberapa teks. Lihat tautan 4 tentang pengalaman saya. Pemulihan cukup sederhana - lihat tautan 5.
- Jika Anda menggunakan pg_dump, Anda harus memahami bahwa Anda tidak memiliki jaminan bahwa cadangan Anda benar-benar konsisten pada waktunya - sekali lagi lihat tautan 1. Ada kemungkinan untuk menggunakan snapshot basis data (lihat tautan 2 dan 3) tetapi bahkan dengan itu Anda tidak dapat mengandalkan konsistensi 100%. Kami menggunakan pg_dump hanya pada database analitik kami yang memuat baru hanya 1x per hari (partisi kemarin dari database produksi). Anda dapat mempercepatnya dengan opsi paralel (hanya berfungsi untuk format cadangan direktori). Tetapi kelemahannya adalah beban yang jauh lebih tinggi pada instance PG - penggunaan CPU yang lebih tinggi, IO disk yang jauh lebih tinggi. Bahkan jika Anda menjalankan pg_dump dari jarak jauh - dalam kasus seperti itu, Anda hanya menyimpan IO disk untuk menyimpan file cadangan. Plus pg_dump perlu menempatkan kunci baca pada tabel sehingga dapat bertabrakan dengan sisipan baru atau dengan replikasi (bila diambil pada replika). Tetapi ketika database Anda mencapai ratusan GB, bahkan dump paralel dapat memakan waktu berjam-jam dan pada saat itu Anda tetap harus beralih ke pg_basebackup.
- pg_barman adalah "versi nyaman" dari pg_basebackup + ini memungkinkan Anda untuk mencegah kehilangan data bahkan ketika instans PG Anda mogok dengan sangat parah. Mengaturnya agar berfungsi membutuhkan lebih banyak perubahan tetapi itu pasti sepadan. Anda harus mengatur pengarsipan log WAL (lihat tautan 6) dan jika PG Anda <10 Anda harus mengatur "max_wal_senders" dan "max_replication_slots" (yang tetap Anda perlukan untuk replikasi) - semuanya ada di manual pg-barman meskipun deskripsi tidak benar-benar hebat. pg_barman akan mengalirkan dan menyimpan catatan WAL bahkan di antara pencadangan sehingga dengan cara ini Anda dapat yakin bahwa kehilangan data jika terjadi kerusakan yang sangat parah hampir tidak ada. Tetapi membuatnya bekerja bisa memakan waktu berjam-jam karena deskripsinya tidak terlalu bagus. pg-barman melakukan pencadangan dan pemulihan dengan perintahnya.
Basis data Anda berukuran 5GB sehingga metode pencadangan apa pun akan cepat. Tetapi Anda harus memutuskan apakah Anda memerlukan pemulihan waktu dan hampir nol kehilangan data atau tidak - jadi apakah Anda akan menginvestasikan waktu untuk menyetel pg-barman atau tidak.
Tautan:
- PostgreSQL, Cadangan, dan semuanya kamu perlu tahu
- Ulasan untuk Makalah:14-Serializable Isolasi Cuplikan di PostgreSQL - tentang cuplikan
- Pembuangan database paralel - contoh cara menggunakan snapshot
- pg_basebackup pengalaman
- pg_basebackup - pulihkan cadangan tar
- Mengarsipkan log WAL menggunakan skrip