Server Rumahan & Self-Hosting

Latihan Restore MariaDB untuk Home Server - Buktikan Backup Sebelum Dibutuhkan

Latihan Restore MariaDB untuk Home Server - Buktikan Backup Sebelum Dibutuhkan

Sebuah scheduled job selesai tanpa error, arsip baru muncul di disk lain, dan checksum-nya cocok. Apakah database sekarang sudah bisa dipulihkan? Semua itu adalah sinyal yang berguna, tetapi hanya menjawab pertanyaan yang lebih sempit: ada material backup yang dapat dibaca. Sinyal tersebut belum menunjukkan bahwa MariaDB dapat membangun kembali objek yang diharapkan, aplikasi dapat memahami hasil restore, atau bagian sistem yang belum ikut dicadangkan sudah teridentifikasi.

Latihan restore menutup sebagian celah itu. Ini adalah latihan pemulihan yang direncanakan, dilakukan jauh dari production, dengan recovery point dan pemeriksaan penerimaan yang jelas. Tujuannya bukan menciptakan kepastian semu, melainkan mengganti asumsi yang belum diuji dengan bukti, lalu mencatat apa yang masih belum pasti.

Mulai dengan mendefinisikan arti “berhasil dipulihkan”

Perintah import yang sukses bukan definisi pemulihan yang lengkap. Untuk aplikasi publikasi kecil, “berhasil dipulihkan” mungkin berarti database server dapat berjalan, schema yang diharapkan tersedia, record dan relasi yang mewakili kondisi nyata tetap utuh, encoding teks benar, dan salinan aplikasi yang terisolasi dapat membaca data. Layanan lain mungkin juga membutuhkan scheduled event, stored routine, encryption key, file upload, atau akun database tertentu.

Tulis kriteria penerimaan sebelum latihan. Tanpa itu, kita mudah berhenti pada sinyal hijau pertama. Rencana latihan sederhana dapat menyebutkan:

  • snapshot atau dump backup yang akan digunakan;
  • mesin, virtual machine, atau container terisolasi yang akan menerimanya;
  • objek database dan record representatif yang harus tersedia;
  • alur aplikasi read-only yang akan diperiksa;
  • komponen eksternal yang sengaja berada di luar cakupan latihan; dan
  • kapan pengukuran waktu dimulai serta kondisi apa yang dianggap sebagai pemulihan selesai.

Ini adalah versi kecil dari gagasan contingency planning yang lebih luas. NIST SP 800-34 Rev. 1 menempatkan kebutuhan, prioritas, dan latihan pemulihan sebagai bagian dari perencanaan, bukan keputusan yang baru diimprovisasi setelah gangguan terjadi. Home server pribadi tidak membutuhkan administrasi setingkat lembaga federal, tetapi tetap mendapat manfaat dari pemisahan antara prosedur yang direncanakan dan kemampuan yang benar-benar pernah dilatih.

Tiga pemeriksaan menjawab tiga pertanyaan berbeda

1. Apakah storage backup dapat dibaca?

Pemeriksaan integritas repository mencari data backup yang rusak atau hilang. Pada restic, check secara default memeriksa struktur repository. Menurut dokumentasi repository restic, pemeriksaan data pack yang sebenarnya memerlukan --read-data atau opsi --read-data-subset. Membaca seluruh data dapat memerlukan waktu dan menimbulkan biaya bandwidth pada repository remote.

Pemeriksaan itu penting, tetapi tidak menjalankan MariaDB. Repository yang strukturnya sehat masih bisa berisi dump yang salah, pilihan objek database yang tidak lengkap, atau dump yang tidak dapat digunakan oleh environment pemulihan saat ini.

2. Apakah MariaDB dapat menerima backup?

Lapisan berikutnya memulihkan material database ke target terisolasi. Langkah ini dapat menemukan syntax error, fitur yang tidak kompatibel, privilege yang kurang, storage yang tidak cukup, dan beberapa pilihan backup yang tidak lengkap. Proses tersebut juga memperlihatkan langkah manual yang sebelumnya hanya tersimpan dalam ingatan seseorang.

Bahkan pada tahap ini, exit status nol hanyalah satu hasil pengamatan. Itu belum membuktikan bahwa setiap row, relasi, routine, atau karakter bertahan dengan makna yang dimaksud.

3. Apakah aplikasi dapat menggunakan hasilnya?

Lapisan terakhir menghubungkan instance aplikasi sekali pakai ke database hasil restore dan menjalankan beberapa alur baca terpilih. Respons homepage saja merupakan bukti yang lemah: halaman itu mungkin berasal dari cache atau hanya menyentuh beberapa table. Pemeriksaan yang lebih baik sengaja mencakup konten representatif, metadata autentikasi tanpa melakukan login sungguhan, relasi kategori, teks multibahasa, dan fitur yang bergantung pada view atau objek database terjadwal.

Ketiga lapisan ini saling melengkapi. Integritas repository, kemampuan import database, dan kemampuan aplikasi menggunakan data sebaiknya tidak dilebur menjadi satu status samar bernama “backup OK”.

Kenali jenis backup yang sedang dipulihkan

Logical dump dan physical backup memerlukan prosedur berbeda. MariaDB mendokumentasikan mariadb-dump sebagai tool yang menulis pernyataan SQL untuk membuat kembali struktur dan data database. Hasilnya dapat diperiksa dan di-import melalui MariaDB client, sehingga praktis untuk latihan kecil yang terisolasi.

Physical backup yang dibuat dengan mariadb-backup berisi file database, bukan rangkaian pernyataan SQL yang portabel. Dokumentasi full backup dan restore MariaDB menjelaskan bahwa file tersebut harus dipersiapkan sebelum restore. Prosedur copy-back membutuhkan server yang berhenti dan data directory kosong, sementara kompatibilitas tool dengan versi server yang terkait juga penting. Import file SQL dan menyalin physical data file yang sudah dipersiapkan bukan resep yang dapat dipertukarkan.

Untuk jenis mana pun, gunakan target sekali pakai yang tidak mungkin menulis ke production secara tidak sengaja. Nama database alternatif pada production server tidak seisolatif instance MariaDB terpisah: tekanan resource, kesalahan akun, atau konfigurasi aplikasi yang keliru tetap bisa memengaruhi layanan live. VM, container, atau host cadangan yang terpisah memberi batas yang lebih jelas jika tersedia.

Latihan terbatas untuk logical dump MariaDB

1. Catat sumber dan target

Identifikasi snapshot yang tepat, timestamp dump jika diketahui, ukurannya, serta versi MariaDB yang dipakai untuk membuat dan memulihkannya. Catat nama database yang diharapkan dan release aplikasi yang seharusnya memahami schema tersebut. Jangan diam-diam memilih “latest”: recovery point dalam latihan harus terlihat jelas.

Jika file SQL berada di dalam snapshot restic, pulihkan ke directory terpisah. Dokumentasi restore restic mendukung target terpisah dan memperingatkan bahwa restore in-place yang terputus dapat meninggalkan file dalam keadaan setengah dipulihkan. Berhasil mendapatkan file SQL hanya membuktikan bahwa lapisan ini bekerja; pertahankan import database sebagai langkah terpisah dengan bukti tersendiri.

2. Periksa bagaimana dump dibuat

Perintah yang menghasilkan dump adalah bagian dari desain pemulihan. MariaDB menjelaskan bahwa trigger disertakan secara default, sedangkan stored routine dan event memerlukan opsi seperti --routines dan --events. Sebuah situs yang bergantung pada salah satu fitur tersebut dapat memiliki semua table tetapi tetap belum lengkap.

Konsistensi juga perlu diberi batasan. Untuk table transaksional seperti InnoDB, --single-transaction dapat mengambil keadaan yang konsisten tanpa mengunci table tersebut selama seluruh proses dump. Jaminan yang sama tidak otomatis berlaku untuk engine non-transaksional, sedangkan DDL bersamaan seperti ALTER TABLE dapat merusak asumsi itu. Periksa engine dan perintah yang tepat, bukan sekadar menambahkan opsi sebagai ritual.

Hindari menaruh password database langsung di argumen proses. Dokumentasi MariaDB menyebut praktik itu tidak aman dan menyarankan option file. Latihan restore seharusnya tidak menyelesaikan masalah availability dengan menciptakan kebocoran credential.

3. Import ke target kosong yang terisolasi

Buat target baru dengan ruang kosong yang cukup dan pilih versi MariaDB secara sengaja. Import logical dump menggunakan syntax client yang didokumentasikan untuk release terpasang:

mariadb restore_drill < site-backup.sql

Contoh ini mengasumsikan database restore_drill yang kosong sudah tersedia, dump memang ditujukan untuk satu database, dan autentikasi berasal dari konfigurasi client yang terlindungi. Dump yang dibuat dengan --databases atau --all-databases memuat pernyataan pemilihan database yang lebih luas dan membutuhkan target yang benar-benar sesuai tingkat isolasinya. Baca header file dan perintah pembuatannya sebelum import.

Catat versi client dan server, waktu mulai dan selesai, exit status, serta error output. Jangan mengedit dump hanya agar latihan lulus tanpa mencatat alasannya. Perbaikan manual yang diperlukan adalah temuan tentang proses pemulihan.

4. Validasi struktur dan makna

Mulai dengan inventaris: table, view, trigger, routine, dan event yang diharapkan. Setelah itu, bergerak melampaui inventaris. Bandingkan sejumlah kecil fakta yang telah dipilih dan dipahami maknanya: count dalam rentang yang masuk akal, ID record yang dikenal, relasi parent-child, uniqueness constraint, dan timestamp representatif. Total jumlah row dapat cocok sementara kolom penting terpotong atau relasi rusak.

Sertakan teks yang tidak sederhana. Nama dengan aksen, konten Indonesia dan German, emoji jika aplikasi mengizinkannya, serta field HTML panjang dapat memperlihatkan masalah character set atau truncation yang tersembunyi oleh test row ASCII. Ini bukan pengganti validasi menyeluruh, tetapi merupakan sampel yang lebih informatif.

Tool pemeriksaan table dapat menambah bukti, tetapi bukan pembuktian universal. Storage engine mendukung pemeriksaan yang berbeda, sementara konsistensi logis berada pada tingkat aplikasi. Sebuah table yang valid tetap bisa memiliki referensi kategori yang tidak menuju mana pun atau status publikasi yang ditafsirkan secara keliru oleh aplikasi.

5. Jalankan aplikasi tanpa menimbulkan efek samping

Hubungkan salinan aplikasi sekali pakai ke database hasil restore dengan email keluar, push notification, webhook, scheduled job, dan integrasi pembayaran dalam keadaan nonaktif. Utamakan pemeriksaan read-only. Buka beberapa route yang sengaja dipilih, termasuk satu yang memakai relasi dan satu yang memuat data multibahasa atau data lama. Lewati cache atau mulai dengan cache kosong agar respons benar-benar bergantung pada hasil restore.

Jangan memakai ulang production session secret atau credential pihak ketiga live hanya untuk membuat test environment menyerupai production. Jika data aplikasi terenkripsi membutuhkan key, catat dependensi itu dan sediakan melalui proses khusus latihan yang terkontrol. Menemukan bahwa database tidak berguna tanpa key yang hilang adalah hasil penting, bukan alasan untuk menyembunyikan celah.

Ubah hasilnya menjadi catatan pemulihan

Catatan yang berguna menyampaikan lebih dari sekadar “lulus”. Tulis recovery point yang dipilih, waktu setiap tahap, command atau versi runbook yang digunakan, pemeriksaan yang selesai, kegagalan yang ditemukan, intervensi manual, dan komponen yang tidak diuji. Catat jika target memiliki hardware, kecepatan storage, versi MariaDB, atau kondisi jaringan yang berbeda. Perbedaan tersebut membatasi kemampuan angka waktunya untuk memprediksi insiden nyata.

Setiap kegagalan sebaiknya menghasilkan koreksi konkret: mengubah opsi dump, menyimpan file konfigurasi yang hilang, mendokumentasikan dependensi encryption key, menyediakan temporary space lebih besar, atau memperbarui checklist aplikasi. Lalu ulangi bagian yang gagal. Latihan yang menemukan celah itu berguna; laporan yang diam-diam mengubah definisi sukses tidak berguna.

Frekuensi sebaiknya mengikuti perubahan dan konsekuensi, bukan aturan kalender universal. Ulangi setelah perubahan penting pada versi database, metode backup, schema, encryption, tujuan storage, atau recovery environment. Situs kecil dapat memilih ritme berbeda dari sistem dengan kewajiban availability ketat. Pertanyaan yang jujur adalah apakah latihan terakhir masih menyerupai sistem yang perlu dipulihkan hari ini.

Apa yang tetap tidak dapat dibuktikan oleh latihan

Satu restore yang berhasil tidak menjamin snapshot, perangkat storage, atau skenario kegagalan berikutnya. Target terisolasi mungkin lebih cepat atau lebih lambat daripada hardware pengganti. Cakupannya mungkin tidak menyertakan DNS, sertifikat TLS, media upload, queue, object storage, atau external API. Logical dump dapat memulihkan data aplikasi tetapi kehilangan akun tingkat server atau konfigurasi operasional yang memang tidak pernah berada dalam cakupannya.

Latihan juga hanya mengambil sampel data. Memeriksa record representatif dapat menemukan kegagalan bermakna, tetapi tidak membuktikan semua nilai benar. Keyakinan yang lebih kuat dapat menggabungkan pemeriksaan integritas backup, database constraint, application test, monitoring, dan sesekali latihan pemulihan yang lebih luas. Setiap metode menutup blind spot yang berbeda.

Kesimpulan

Backup database menjadi lebih dapat dipercaya setelah melewati seluruh jalur yang direncanakan: keluar dari storage, masuk ke instance MariaDB terisolasi, melewati pemeriksaan struktural dan semantik, lalu digunakan oleh aplikasi sekali pakai. Hasilnya bukan kepastian. Hasilnya adalah bukti bertanggal, prosedur yang terukur, dan daftar dependensi yang tidak lagi harus ditebak saat terjadi outage.

Langkah kecil yang berguna bukan merancang ulang seluruh sistem backup. Pilih satu dump yang sudah ada, tentukan tiga atau empat pemeriksaan penerimaan yang bermakna, pulihkan jauh dari production, lalu tulis titik tempat prosedur mulai tersendat. Keraguan pada titik itulah yang sering menjadi temuan paling berharga dari latihan restore.

References