Inilah jam terburuk dalam pekerjaan ini, dan lebih sering selamat daripada yang terasa. Bekerjalah dari salinan terbaru mundur ke belakang, dan jangan menimpa apa pun selagi Anda mencoba.
Pertama: jangan sentuh yang aslinya
cp backup.tar.gz /srv/work/backup-copy.tar.gz
Setiap upaya pemulihan di bawah ini merusak di suatu titik. Selalu bekerjalah pada salinan, supaya percobaan yang gagal tidak memakan ongkos apa pun.
Kalau gzip menolak
gzip -t backup.tar.gz # what is wrong
zcat backup.tar.gz > partial.tar 2>/dev/null || true
tar -xf partial.tar --ignore-zeros --warning=no-timestamp
gzip yang terpotong tetap membuka semuanya sampai ke titik kerusakannya. Pada arsip yang tersusun menurut abjad, itu sering kali berarti sebagian besar situs.
Kalau dump SQL tidak mau diimpor
zcat db.sql.gz | head -50 # is the header there
zcat db.sql.gz | tail -5 # does it end with "Dump completed"
# import ignoring the failures, then see what arrived
zcat db.sql.gz | mysql --force restore_test
mysql restore_test -e "SHOW TABLES"
--force terus berjalan melewati pernyataan yang rusak. Dump yang terpotong di tengah sebuah tabel akan memulihkan semua tabel sebelumnya, dan sering kali justru itulah yang Anda butuhkan.
Lalu carilah salinan lain
- Citra cadangan milik penyedianya sendiri, yang terpisah dari milik Anda.
- Server uji coba, yang merupakan salinan produksi yang sedikit lebih tua.
- Laptop seorang pengembang yang menyimpan dump baru-baru ini.
- Hasil ekspor dari aplikasinya sendiri — sebuah CSV pesanan tetap lebih berharga daripada tidak ada apa-apa.
Sesudahnya, supaya tidak terulang
Cadangan itu entah sudah diperiksa, entah hanya sebuah harapan. Ujilah arsipnya pada setiap kali jalan dan pulihkan satu secara terjadwal — lihat Menguji pemulihan dan Membaca log pencadangan yang gagal. Dan simpanlah lebih dari satu, di lebih dari satu tempat: Mengapa satu cadangan bukanlah cadangan.