Lewati ke konten
RazinSaid

Backup Otomatis Database MySQL dengan Cron

RS
Razin Said
4 menit baca

Kehilangan data itu mimpi buruk buat developer mana pun. Kabar baiknya, kamu nggak perlu repot nyalin database MySQL manual tiap hari cuma demi jaga-jaga. Dengan backup otomatis pakai cron, biar server yang ngurus semuanya sendiri di jam yang udah kamu tentuin — bahkan pas kamu lagi tidur pulas. Kali ini kita bakal ngerakit sistem backup yang simpel tapi bener-bener bisa diandalin, mulai dari nol.

Kenapa Backup Itu Wajib?

Database itu ibarat jantungnya hampir semua aplikasi. Isinya bisa data pengguna, transaksi, artikel — pokoknya apa pun yang bikin aplikasi kamu hidup. Masalahnya, banyak banget hal yang bisa bikin kacau: disk rusak, nggak sengaja ngetik DELETE yang salah, kena serangan ransomware, atau VPS yang tiba-tiba dihapus sama penyedia hosting.

Backup yang bener sebenernya cuma ngikutin aturan simpel: punya lebih dari satu salinan, dan jangan naruh semuanya di satu tempat. Targetnya di sini gampang — bikin salinan otomatis yang konsisten, biar kamu selalu bisa balik ke kondisi terakhir yang masih sehat.

Kenalan Dulu sama mysqldump

Senjata utama kita namanya mysqldump, dan enaknya dia udah kepasang otomatis bareng MySQL atau MariaDB. Cara kerjanya gini: dia baca isi database, terus ngubahnya jadi file teks yang isinya perintah SQL. Nah, file inilah yang nanti bisa kamu pakai buat restore kapan aja.

Coba deh jalanin perintah ini buat nge-backup satu database:

mysqldump -u root -p nama_database > backup.sql

Nanti kamu bakal diminta masukin password, terus file backup.sql langsung kebentuk. Gampang, kan? Tapi ada satu ganjalan: kalau mau otomatis, masa iya kita ngetik password manual tiap kali? Ya nggak mungkin.

Nyimpen Kredensial dengan Aman

Nulis password langsung di dalam script itu kebiasaan jelek. Cara yang lebih aman: bikin file konfigurasi khusus yang cuma bisa dibaca sama pemiliknya. Yuk bikin file ~/.my.cnf:

nano ~/.my.cnf

Isi pakai kredensial kamu:

[client]
user=root
password=kata_sandi_anda

Habis itu, kunci izinnya biar user lain nggak bisa ngintip isinya. Langkah ini penting banget; kalau kamu pengen paham lebih dalam soal hak akses file, mampir dulu ke perintah Linux dasar untuk developer.

chmod 600 ~/.my.cnf

Sekarang mysqldump udah bisa baca kredensial sendiri tanpa kamu ketik ulang.

Bikin Script Backup-nya

Sekarang kita bikin script yang agak lebih pinter dikit. Script ini bakal nambahin tanggal ke nama file, terus langsung ngompres hasilnya biar hemat ruang. Bikin file backup-db.sh:

nano ~/backup-db.sh

Isi dengan kode ini:

#!/bin/bash
DB_NAME="nama_database"
BACKUP_DIR="/home/user/backups"
TANGGAL=$(date +%Y-%m-%d_%H-%M)
FILE="$BACKUP_DIR/$DB_NAME-$TANGGAL.sql.gz"

mkdir -p "$BACKUP_DIR"
mysqldump "$DB_NAME" | gzip > "$FILE"

# Hapus backup yang lebih tua dari 7 hari
find "$BACKUP_DIR" -name "*.sql.gz" -mtime +7 -delete

Baris paling bawah itu jangan diremehin: tanpa dia, folder backup kamu bakal terus gembung tanpa henti. Perintah find di atas otomatis nyapu file yang umurnya udah lewat tujuh hari.

Setelah disimpan, kasih izin biar script-nya bisa dieksekusi, terus tes dulu manual:

chmod +x ~/backup-db.sh
~/backup-db.sh

Cek folder backup-nya. Kalau muncul file .sql.gz, berarti script kamu udah jalan mulus.

Jadwalin Pakai Cron

Nah, ini dia bagian yang bikin semuanya jadi otomatis. Cron itu penjadwal tugas bawaan Linux. Buka editor crontab:

crontab -e

Tambahin baris ini biar backup jalan tiap hari jam 2 pagi:

0 2 * * * /home/user/backup-db.sh

Lima angka di depan itu jadwalnya: menit, jam, tanggal, bulan, sama hari dalam seminggu. Jadi 0 2 * * * artinya "menit ke-0, jam ke-2, tiap hari". Milih jam dini hari itu pilihan cerdas, soalnya trafik server biasanya lagi sepi-sepinya.

Balikin Data dari Backup

Backup nggak ada gunanya kalau kamu sendiri nggak tau cara balikinnya. Buat ngembaliin data dari file yang udah dikompres, pakai perintah ini:

gunzip < nama_database-2026-06-19_02-00.sql.gz | mysql nama_database

Saran serius nih: coba proses restore ini minimal sekali aja. Backup yang nggak pernah dites itu sama aja kayak nggak punya backup sama sekali.

FAQ

Backup lokal doang udah cukup belum?

Belum. Kalau VPS kamu rusak total, backup yang nyimpen di VPS yang sama ya ikutan lenyap. Rutin-rutinlah nyalin file backup ke tempat lain, misalnya object storage atau komputer lokal kamu.

Gimana cara backup semua database sekaligus?

Tinggal pakai opsi --all-databases di mysqldump. Tapi kalau mau restore-nya lebih fleksibel, nge-backup tiap database secara terpisah biasanya malah lebih praktis.

Cron-ku kok nggak jalan, ya?

Biang keroknya paling sering adalah path yang nggak lengkap. Selalu pakai path absolut di crontab, dan cek log-nya pakai grep CRON /var/log/syslog.

Penutup

Backup otomatis itu salah satu investasi keamanan yang paling murah tapi paling berharga. Begitu script sama cron-nya udah jalan, kamu bisa tidur jauh lebih nyenyak. Kalau mau ngurusin langkah keamanan lainnya, lanjut baca cara hardening VPS Ubuntu dari serangan aja.

Satu tips praktis lagi: pasang notifikasi sederhana di ujung script (misalnya kirim pesan ke Telegram atau email), biar kamu langsung ngeh kalau suatu hari backup-nya ternyata gagal jalan.

Bagikan: XWhatsAppFacebookLinkedIn

Artikel terkait