Backup, Restore, dan Kebiasaan Baik di Dunia Kerja

Mencadangkan database dengan mysqldump, memulihkannya, menguji hasilnya dengan query verifikasi, serta kumpulan praktik baik: charset, migrasi, slow query log, dan checklist produksi.

Part 36 dari 38 ± 40 menit Gratis

Aturan nomor satu di dunia database

Ada dua jenis orang: yang sudah kehilangan data, dan yang akan kehilangan data. Disk rusak, salah DROP, ransomware, bug aplikasi — semua bisa terjadi. Satu-satunya penolong adalah backup yang terbukti bisa dipulihkan.

Backup yang belum pernah diuji restore itu hanya harapan, bukan backup. Jadwalkan uji restore berkala di server percobaan.

mysqldump: backup logis

mysqldump adalah program (bukan perintah SQL; dijalankan di terminal) yang mengekspor database menjadi berkas teks berisi perintah CREATE TABLE dan INSERT.

# backup satu database
mysqldump -u root -p tokoku > tokoku_2024-06-30.sql

# backup konsisten untuk tabel InnoDB tanpa mengunci aplikasi
mysqldump -u root -p --single-transaction --routines --triggers tokoku > tokoku.sql

# beberapa tabel saja
mysqldump -u root -p tokoku produk pelanggan > sebagian.sql

# semua database + dikompres
mysqldump -u root -p --all-databases | gzip > semua.sql.gz

Restore: memulihkan

# ke database yang sudah dibuat kosong
mysql -u root -p -e "CREATE DATABASE tokoku_pulih"
mysql -u root -p tokoku_pulih < tokoku_2024-06-30.sql

# dari berkas gzip
gunzip < semua.sql.gz | mysql -u root -p

Strategi backup yang waras

  • Otomatis & terjadwal (cron di Linux) — backup manual pasti terlupa.
  • Aturan 3-2-1: 3 salinan data, di 2 jenis media berbeda, 1 di lokasi lain (cloud / kantor lain).
  • Beri tanggal pada nama berkas, simpan beberapa generasi (harian 7 hari, mingguan 4 minggu, bulanan 12 bulan).
  • Binary log (binlog) memungkinkan point-in-time recovery: memulihkan sampai detik sebelum bencana.
  • Untuk database sangat besar ada backup fisik (Percona XtraBackup, MySQL Enterprise Backup); layanan cloud (RDS, Cloud SQL) menyediakan snapshot otomatis.

Menguji hasil restore dengan SQL

Setelah restore, bandingkan database asli dan hasil pulih. Cara cepat: hitung jumlah baris tiap tabel utama.

SELECT 'produk' AS tabel, COUNT(*) AS jumlah_baris FROM produk
UNION ALL
SELECT 'pelanggan', COUNT(*) FROM pelanggan
UNION ALL
SELECT 'pesanan', COUNT(*) FROM pesanan
ORDER BY tabel;

Jalankan di kedua database; angkanya harus sama. Untuk pemeriksaan lebih ketat: CHECKSUM TABLE produk; atau membandingkan total SUM(total) penjualan.

Ekspor-impor CSV

SELECT * FROM produk INTO OUTFILE '/var/lib/mysql-files/produk.csv'
  FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n';

LOAD DATA INFILE '/var/lib/mysql-files/produk.csv' INTO TABLE produk
  FIELDS TERMINATED BY ',' ENCLOSED BY '"';

Checklist kebiasaan baik

AreaKebiasaan
DesainPrimary key di setiap tabel; tipe data tepat; utf8mb4; kolom created_at/updated_at
Perubahan strukturLewat migrasi yang tercatat di Git (Laravel Migration, Flyway, dll.), bukan klik manual di produksi
QueryHindari SELECT * di aplikasi; selalu LIMIT/pagination; cek dengan EXPLAIN
PerformaAktifkan slow query log untuk menemukan query lambat; pasang index yang tepat
Perubahan data manualDalam transaksi; SELECT dulu; ada backup
KeamananUser khusus per aplikasi dengan hak minimal; password kuat; TLS
PemantauanPerhatikan ruang disk, koneksi, dan replikasi; atur alert

Praktikkan langsung, gratis

Tulis dan jalankan kode langsung di browser, dapatkan penilaian otomatis. Daftar gratis kapan saja untuk menyimpan progres dan meraih sertifikat.

Coba latihan sekarang, tanpa daftar
Bagikan: WhatsApp Facebook LinkedIn X