Di tempat kerja kami melakukan dump malam dari database mysql kami. Dari hari ke hari, saya akan menyarankan bahwa hampir 90-95% dari data adalah duplikat, meningkat seiring berjalannya waktu. (Heck pada titik ini ada yang mungkin 99%)
Kesedihan ini adalah di mana satu baris adalah pernyataan INSERT mysql tunggal, jadi satu-satunya perbedaan adalah seluruh baris, dan urutan di mana mereka berada dalam file. Jika saya menyortirnya, perbedaan sebenarnya dari file ke file akan sangat kecil.
Saya sudah mencari, dan saya belum menemukan cara untuk mengurutkan output pada dump. Saya bisa menyalurkannya melalui sort
perintah. Kemudian akan ada blok panjang yang sama dari garis yang identik.
Jadi saya mencoba mencari cara untuk menyimpan hanya diff. Saya bisa mulai dengan dump utama, dan berbeda setiap malam. Tetapi perbedaan akan lebih besar setiap malam. Atau, saya bisa membuat rolling diff, yang secara individual akan sangat kecil, tetapi sepertinya akan lebih lama dan lebih lama untuk dihitung, jika saya harus membuat master diff dari seluruh seri setiap malam.
Apakah ini layak? Dengan alat apa?
Sunting Saya tidak bertanya bagaimana cara melakukan backup mysql. Lupakan mysql untuk saat ini. Itu adalah herring merah. Yang ingin saya ketahui adalah bagaimana membuat serangkaian rolling bergulir dari serangkaian file. Setiap malam kami mendapatkan file (yang merupakan file mysqldump ) yang 99% mirip dengan yang sebelumnya. Ya, kami gzip semuanya. Tapi itu berlebihan untuk memiliki semua redundansi itu di tempat pertama. Yang saya butuhkan hanyalah perbedaan dari malam sebelumnya ... yang hanya 1% berbeda dari malam sebelumnya ... dan seterusnya. Jadi yang saya cari adalah bagaimana membuat serangkaian diff jadi saya hanya perlu menyimpan 1% itu setiap malam.
sumber
Akhir-akhir ini saya sudah mencoba menyimpan dump database di git. Ini mungkin menjadi tidak praktis jika dump database Anda benar-benar besar, tetapi itu berfungsi untuk saya untuk database yang bertubuh kecil (situs Wordpress dan sejenisnya).
Skrip cadangan saya kira-kira:
sumber
Anda dapat melakukan hal seperti ini (dengan
a.sql
cadangan mingguan Anda).File diff Anda akan menjadi lebih besar pada akhir minggu ini.
Saran saya adalah gzip saja (gunakan
gzip -9
untuk kompresi maksimum). Kami melakukan ini saat ini dan itu memberikan penggunaan file 59MB gz sedangkan aslinya 639MB.sumber
Ada beberapa pendekatan yang mungkin bisa diikuti, tergantung pada ukuran dan kesamaan tekstual aktual dari dump database:
sumber
(Saya belum melakukan ini dalam produksi.)
Lakukan pencadangan penuh sekali sehari atau seminggu. Cadangkan log cadangan sekali per jam atau sehari.
sumber