Cara Backup Database Mysql ke S3 Object Storage
Pengantar
Backup database MySQL merupakan langkah penting untuk menjaga keamanan dan ketersediaan data. Tanpa backup, risiko kehilangan data akibat kegagalan hardware, kesalahan konfigurasi, atau serangan keamanan bisa sangat merugikan.
Dengan menyimpan backup ke object storage seperti MinIO (S3-compatible), pengguna mendapatkan beberapa keunggulan:
-
Aman: Data dapat disimpan terpisah dari server utama.
-
Skalabel: Dapat menampung backup dalam jumlah besar tanpa keterbatasan seperti storage lokal.
-
Mudah diakses: File backup dapat diunduh kapan saja melalui API atau S3 client.
Prasyarat
Sebelum melakukan backup, pastikan:
-
Server telah terpasang MySQL/MariaDB.
-
Anda memiliki akses ke MinIO (endpoint, access key, secret key, dan bucket name).
-
Terpasang tool S3 client, misalnya mc (MinIO Client).
Langkah-Langkah Backup Database ke MinIO
- MinIO Client
mc adalah command-line tool resmi dari MinIO untuk mengelola object storage.- Install mc :
wget https://dl.min.io/client/mc/release/linux-amd64/mc -O mc chmod +x mc sudo mv mc /usr/local/bin/
- Set alias (harus connect ke port 9000 API, bukan 9001 console)
mc alias set myminio http://IP-Address:9000 minioadmin MinioSecret123
- Cek status:
mc admin info myminio
- Install mc :
- Buka crontab
Jalankan perintah:
crontab -e
Jika pertama kali membuka, sistem akan menanyakan editor. Pilih nano agar lebih mudah digunakan.
Kalau editor default bukan nano, bisa dipaksa dengan:
export VISUAL=nano export EDITOR=nano
- Isi Konfigurasi Crontab
Tambahkan konfigurasi berikut di dalam crontab:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin */5 * * * * TMP_FILE="/tmp/wordpress-$(date +\%F-\%H\%M\%S).sql"; /usr/bin/mysqldump wordpress > "$TMP_FILE" && /usr/local/bin/mc cp "$TMP_FILE" myminio/wordpress/ && rm "$TMP_FILE" >> /var/log/wordpress_backup.log 2>&1
Simpan dengan CTRL + O, lalu keluar dengan CTRL + X.
- Penjelasan Konfigurasi:
- Menentukan PATH di Crontab
Secara default, crontab tidak mewarisi environment PATH dari shell. Oleh karena itu, kita perlu menambahkan konfigurasi PATH di awal agar perintah yang digunakan dapat dikenali:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
- Menentukan Jadwal Cron
Format cron adalah:
Penjelasan :minute hour day month day-of-week
-
*/5 * * * * → menjalankan perintah setiap 5 menit.
-
0 5 * * * → menjalankan perintah setiap hari pukul 05:00.
-
- Membuat Nama File Backup dengan Timestamp
Untuk menghindari penimpaan file, kita gunakan timestamp pada nama file:
TMP_FILE="/tmp/wordpress-$(date +\%F-\%H\%M\%S).sql"
-
%F → tanggal (YYYY-MM-DD).
-
%H%M%S → jam, menit, detik.
-
Contoh hasil: /tmp/wordpress-2025-09-10-153500.sql.
-
- Dump Database WordPress
Perintah mysqldump digunakan untuk menyalin seluruh isi database wordpress:
/usr/bin/mysqldump wordpress > "$TMP_FILE"
- Upload ke MinIO Menggunakan mc
Hasil dump dikirim ke bucket wordpress di server MinIO menggunakan perintah:
/usr/local/bin/mc cp "$TMP_FILE" myminio/wordpress/
Pastikan alias myminio sudah diset sebelumnya:
mc alias set myminio http://IP:9000 ACCESSKEY SECRETKEY
- Menghapus File Sementara
Setelah berhasil diunggah, file di direktori /tmp dihapus agar tidak menumpuk:
rm "$TMP_FILE"
- Logging Hasil Eksekusi
Untuk mencatat hasil dan error, tambahkan logging:
>> /var/log/wordpress_backup.log 2>&1
- Menentukan PATH di Crontab
Kesimpulan
Dengan konfigurasi crontab di atas, backup database WordPress dapat berjalan otomatis setiap 5 menit sekali, tersimpan di MinIO, dan lognya tercatat rapi.