Cara Otomatis Backup Database Mysql ke Server Lain dengan Rsync dan Cronjob
Pendahuluan
Backup database merupakan salah satu langkah penting untuk menjaga keamanan data dan mengantisipasi kerusakan atau kehilangan data pada server. Menyimpan backup di server yang berbeda juga memberikan perlindungan tambahan jika server utama mengalami gangguan.
Pada Linux, backup database MySQL dapat diotomatisasi menggunakan mysqldump, Rsync, SSH, dan Cronjob. Database diekspor menjadi file backup, kemudian dikirim ke server backup menggunakan Rsync melalui koneksi SSH.
Dengan Cronjob, proses backup dapat berjalan otomatis sesuai jadwal tanpa perlu dilakukan secara manual. Artikel ini membahas persiapan server, pembuatan script backup, sinkronisasi menggunakan Rsync, konfigurasi Cronjob, pengujian, dan pengelolaan retensi backup.
Arsitektur dan Skema Backup
Backup database menggunakan dua server, yaitu Server Database sebagai sumber data dan Server Backup sebagai tempat penyimpanan hasil backup.
Database MySQL pada Server Database akan dibuat menjadi file backup menggunakan mysqldump. File tersebut kemudian disinkronkan ke Server Backup menggunakan Rsync melalui SSH. Selanjutnya, proses backup dan sinkronisasi dijalankan secara otomatis menggunakan Cronjob.

Persiapan Server
- Server Database: memiliki MySQL dan database yang akan dicadangkan.
- Server Backup: digunakan sebagai lokasi penyimpanan file backup.
- Pastikan layanan SSH aktif pada kedua server.
- Instal Rsync pada kedua server.
- Pastikan Server Database dapat terhubung ke Server Backup melalui SSH.
- Siapkan direktori khusus untuk menyimpan file backup.
- Pastikan ruang penyimpanan pada Server Backup mencukupi.
Konfigurasi Akses SSH Tanpa Password
-
Konfigurasi SSH Tanpa Password
Agar Rsync dapat berjalan otomatis melalui Cronjob, Server Database harus dapat terhubung ke Server Backup tanpa memasukkan password.
-
Buat SSH key pada Server Database:
ssh-keygen -t ed25519Tekan Enter hingga proses selesai tanpa memberikan passphrase.
-
Salin public key ke Server Backup:
ssh-copy-id root@IP_SERVER_BACKUP -
Uji koneksi:
ssh root@IP_SERVER_BACKUP -
Jika berhasil masuk tanpa meminta password, SSH tanpa password sudah siap digunakan untuk proses backup.
-
Persiapan Database MySQL
-
Menguji Backup Database
-
Cek database yang tersedia:
mysql -u root -p -e "SHOW DATABASES;" -
Uji proses mysqldump:
mysqldump -u root -p nama_database > /tmp/test_backup.sql -
Periksa file backup:
ls -lh /tmp/test_backup.sql -
Jika file berhasil dibuat tanpa error, database siap digunakan untuk proses backup otomatis.
-
Membuat Script Backup Database
-
Membuat Script Backup MySQL
Buat script untuk melakukan dump database secara otomatis dengan nama file berdasarkan tanggal.
-
Buat file script:
nano /usr/local/bin/backup_mysql.sh -
Isi dengan:
#!/bin/bash DB_NAME="nama_database" BACKUP_DIR="/backup/mysql" DATE=$(date +"%Y-%m-%d_%H-%M-%S") mkdir -p "$BACKUP_DIR" mysqldump -u root -p'PASSWORD_MYSQL' \ --single-transaction \ --routines \ --triggers \ --events \ "$DB_NAME" > "$BACKUP_DIR/${DB_NAME}_${DATE}.sql" -
Berikan izin eksekusi:
chmod +x /usr/local/bin/backup_mysql.sh -
Jalankan script untuk pengujian:
/usr/local/bin/backup_mysql.sh -
Periksa hasil backup:
ls -lh /backup/mysql/ -
Jika file .sql berhasil dibuat tanpa error, script siap digunakan untuk sinkronisasi menggunakan Rsync.
-
Sinkronisasi Backup ke Server Lain dengan Rsync
-
Sinkronisasi Backup dengan Rsync
Setelah file backup berhasil dibuat, gunakan Rsync untuk mengirimnya ke Server Backup melalui SSH.
-
Buat direktori backup pada Server Backup:
mkdir -p /backup/mysql -
Jalankan Rsync dari Server Database:
rsync -avz /backup/mysql/ root@IP_SERVER_BACKUP:/backup/mysql/ -
Periksa file pada Server Backup:
ls -lh /backup/mysql/ -
Jika file backup sudah tersedia pada Server Backup, proses sinkronisasi berhasil.
-
Otomatisasi dengan Cronjob
-
Konfigurasi Cronjob
Setelah script backup dan sinkronisasi berhasil diuji, proses tersebut dapat dijalankan secara otomatis menggunakan Cronjob.
-
Buka konfigurasi Cronjob:
crontab -e -
Tambahkan jadwal backup, misalnya setiap hari pukul 02.00:
0 2 * * * /usr/local/bin/backup_mysql.sh -
Jika script juga melakukan sinkronisasi menggunakan Rsync, proses backup dan pengiriman file dapat ditempatkan dalam satu script sehingga Cronjob cukup menjalankan satu perintah.
-
Periksa Cronjob yang sudah dibuat:
crontab -l -
Dengan konfigurasi tersebut, backup database akan berjalan secara otomatis sesuai jadwal tanpa perlu dilakukan secara manual.
-
Manajemen Retensi Backup
-
Mengelola Retensi Backup
Agar penyimpanan tidak cepat penuh, backup lama perlu dihapus secara berkala. Salah satu cara sederhana adalah mempertahankan backup selama 7 hari dan menghapus file yang lebih lama.
-
Tambahkan perintah berikut pada script backup:
find "$BACKUP_DIR" -type f -name "*.sql" -mtime +7 -delete -
Dengan konfigurasi tersebut, file backup yang berusia lebih dari 7 hari akan dihapus secara otomatis, sedangkan backup terbaru tetap tersedia pada Server Backup.
-
Pengujian dan Validasi Backup
-
Menguji Proses Backup
Setelah seluruh konfigurasi selesai, lakukan pengujian untuk memastikan backup berhasil dibuat dan dikirim ke Server Backup.
-
Jalankan script secara manual:
/usr/local/bin/backup_mysql.sh -
Periksa file backup pada Server Database:
ls -lh /backup/mysql/ -
Kemudian, periksa file backup pada Server Backup:
ls -lh /backup/mysql/ -
Pastikan file backup dengan nama dan waktu yang sesuai tersedia pada kedua server.
-
Untuk memastikan isi backup dapat digunakan, file .sql juga dapat diuji dengan melakukan restore pada database sementara.
-
Logging dan Monitoring
-
Menambahkan Logging Backup
Logging digunakan untuk mengetahui apakah proses backup dan sinkronisasi berjalan dengan baik. Tambahkan log pada script agar setiap proses backup dapat dicatat.
-
Tambahkan konfigurasi log pada script:
LOG_FILE="/var/log/backup_mysql.log" echo "[$(date)] Backup dimulai" >> "$LOG_FILE" -
Setelah proses backup dan Rsync selesai, tambahkan:
echo "[$(date)] Backup selesai" >> "$LOG_FILE" -
Periksa log dengan:
tail -f /var/log/backup_mysql.log -
Log dapat digunakan untuk memeriksa waktu pelaksanaan backup dan membantu menemukan kesalahan apabila proses backup atau sinkronisasi gagal.
-
Tips Keamanan Backup Database
Untuk menjaga keamanan file backup, beberapa hal berikut perlu diperhatikan:
- Gunakan SSH key untuk koneksi Rsync dan hindari penggunaan password secara otomatis.
- Batasi akses SSH hanya dari server yang diperlukan.
- Gunakan akun khusus backup jika memungkinkan, bukan akun root.
- Atur permission direktori backup agar tidak dapat diakses oleh sembarang pengguna.
- Simpan backup pada server yang berbeda dari server database.
- Terapkan retensi backup agar file lama tidak memenuhi penyimpanan.
- Uji proses restore secara berkala untuk memastikan backup dapat digunakan saat dibutuhkan.
Masalah Umum dan Solusinya
Beberapa masalah yang dapat terjadi pada proses backup menggunakan mysqldump, Rsync, dan Cronjob antara lain:
-
- Backup gagal dibuat : periksa kredensial MySQL dan pastikan database dapat diakses.
- Rsync gagal terhubung : periksa koneksi SSH dan konfigurasi SSH key.
- File tidak terkirim ke Server Backup : periksa path direktori dan permission.
- Cronjob tidak berjalan : periksa konfigurasi menggunakan crontab -l dan log sistem.
- Penyimpanan penuh : periksa retensi backup dan hapus file backup yang sudah tidak diperlukan.
- Backup tidak dapat di-restore : lakukan pengujian restore secara berkala untuk memastikan file backup tidak rusak.
Kesimpulan
Backup database MySQL ke server lain dapat dilakukan secara otomatis menggunakan kombinasi mysqldump, Rsync, SSH, dan Cronjob. Database akan dicadangkan menjadi file, kemudian hasil backup dikirim ke server penyimpanan melalui koneksi SSH.
Dengan otomatisasi tersebut, proses backup dapat berjalan secara terjadwal tanpa perlu dilakukan secara manual. Penerapan retensi backup, logging, pembatasan akses, dan pengujian restore juga penting untuk memastikan backup tetap aman dan dapat digunakan ketika diperlukan.


