Cara Backup Database MySQL ke Google Drive Secara Otomatis

Cara Backup Database MySQL ke Google Drive Secara Otomatis

Pengantar

Backup database merupakan salah satu langkah penting untuk menjaga data website atau aplikasi tetap tersedia ketika terjadi masalah pada server. Kerusakan sistem, kesalahan konfigurasi, penghapusan data, hingga serangan keamanan dapat menyebabkan database tidak dapat digunakan seperti sebelumnya.

Salah satu cara sederhana untuk membuat backup database MySQL adalah menyimpan hasil mysqldump ke penyimpanan terpisah seperti Google Drive. Dengan bantuan Rclone dan Cronjob, proses tersebut dapat dijalankan secara otomatis tanpa perlu melakukan backup secara manual setiap hari.

Persiapan

Sebelum mengikuti panduan, pastikan server sudah memiliki:

  • VPS Linux.
  • MySQL atau MariaDB.
  • Akses root atau sudo.
  • mysqldump.
  • Rclone.
  • Akun Google untuk menyimpan backup.
  • Cron untuk menjalankan backup secara otomatis.

Memastikan MySQL dan mysqldump Tersedia

1. Memeriksa MySQL dan Database

  • Periksa versi MySQL:

    mysql --version
  • Kemudian periksa versi mysqldump:

    mysqldump --version
  • Jika keduanya dapat dijalankan, server sudah siap digunakan untuk membuat backup database.

  • Untuk pengujian, misalnya terdapat database demo_backup dengan tabel pelanggan. Database dapat diperiksa menggunakan:

    mysql -u root -p
  • Kemudian jalankan:

    USE demo_backup;
    
    SELECT * FROM pelanggan;
  • Pastikan data yang ingin dicadangkan tersedia sebelum melanjutkan.

Membuat Direktori Backup

  1. Membuat Direktori Backup Sementara

    • Buat direktori yang digunakan sebagai tempat sementara untuk menyimpan file SQL:

      mkdir -p /backup/mysql
    • Periksa direktori:

      ls -ld /backup/mysql

      Direktori tersebut hanya digunakan sebagai lokasi sementara. Pada contoh ini, file SQL akan dihapus dari VPS setelah berhasil diunggah ke Google Drive.

Membuat Backup MySQL dengan mysqldump

1. Membuat Backup Database dengan mysqldump

  • Backup database dapat dibuat menggunakan mysqldump.

    mysqldump -u root -p \
      --single-transaction \
      --routines \
      --triggers \
      --events \
      --set-gtid-purged=OFF \
      demo_backup > /backup/mysql/demo_backup.sql
  • Setelah selesai, periksa file backup:

    ls -lh /backup/mysql/

    Jika berhasil, akan terlihat file seperti:

    demo_backup.sql

2. Menyimpan Password MySQL

  • Untuk backup otomatis menggunakan Cronjob, sebaiknya jangan memasukkan password MySQL secara langsung ke dalam script.

  • Salah satu cara yang lebih sederhana adalah menggunakan file:

    /root/.my.cnf
  • Buat file tersebut:

    nano /root/.my.cnf
  • Isi dengan:

    [client]
    user=root
    password=PASSWORD_MYSQL
  • Ganti PASSWORD_MYSQL dengan password MySQL yang digunakan.

  • Kemudian batasi permission:

    chmod 600 /root/.my.cnf
  • Uji koneksi MySQL tanpa memasukkan password secara manual:

    mysql -e "SELECT VERSION();"
  • Jika berhasil menampilkan versi MySQL, konfigurasi sudah dapat digunakan oleh script backup.

Menginstal Rclone

1. Instalasi Rclone

Rclone digunakan untuk menghubungkan server dengan layanan penyimpanan cloud, termasuk Google Drive.

  • Pada Ubuntu, instal Rclone dengan perintah:

    apt update
    apt install rclone -y
  • Periksa versi Rclone:

    rclone version
  • Jika versi Rclone berhasil ditampilkan, instalasi telah selesai dan Rclone siap dikonfigurasi.

Menghubungkan Rclone dengan Google Drive

1. Konfigurasi Rclone dengan Google Drive

  • Jalankan konfigurasi Rclone:

    rclone config
  • Pada VPS yang tidak memiliki browser, autentikasi Google dapat dilakukan melalui SSH tunnel.

    Di komputer lokal, buat tunnel:

    ssh -L 53682:localhost:53682 root@IP_VPS

    Contoh:

    ssh -L 53682:localhost:53682 root@103.151.140.83

    Jangan tutup terminal SSH tersebut selama proses autentikasi berlangsung.

  • Kemudian pada VPS jalankan kembali:

    rclone config
  • Saat Rclone menanyakan:

    Use auto config?

    Pilih:

    y
  • Rclone akan menampilkan alamat seperti:

    http://127.0.0.1:53682/auth?state=...
  • Buka alamat tersebut melalui browser pada komputer lokal.
    Login ke akun Google yang akan digunakan sebagai tempat penyimpanan backup dan berikan izin yang diminta.

  • Setelah proses autentikasi selesai, kembali ke terminal VPS dan lanjutkan konfigurasi Rclone hingga selesai.

Menguji Koneksi Rclone ke Google Drive

1. Menguji Upload Backup ke Google Drive

  • Setelah proses autentikasi selesai, pastikan remote Google Drive sudah tersimpan:

    rclone listremotes

    Jika berhasil, akan muncul:

    gdrive:
  • Selanjutnya buat folder khusus untuk menyimpan backup:

    rclone mkdir gdrive:BackupVPS
  • Untuk memastikan Rclone dapat mengakses folder tersebut, jalankan:

    rclone lsd gdrive:
  • Kemudian lakukan pengujian upload menggunakan file SQL yang sudah dibuat sebelumnya:

    rclone copy /backup/mysql/demo_backup.sql gdrive:BackupVPS
  • Periksa file yang berhasil diunggah:

    rclone ls gdrive:BackupVPS
  • Jika file muncul, berarti koneksi antara VPS, Rclone, dan Google Drive sudah berhasil.

Catatan:
SSH tunnel yang digunakan pada tahap autentikasi tidak perlu tetap aktif setelah konfigurasi Rclone selesai. Proses backup berikutnya dapat dilakukan langsung dari VPS menggunakan Rclone.

Membuat Script Backup MySQL

1. Membuat Script Backup MySQL ke Google Drive

  • Setelah koneksi Google Drive berhasil diuji, proses backup dapat dibuat otomatis menggunakan sebuah script.

  • Buat file script:

    nano /usr/local/bin/backup_mysql_gdrive.sh
  • Masukkan konfigurasi berikut:

    #!/bin/bash
    
    BACKUP_DIR="/backup/mysql"
    REMOTE_DIR="gdrive:BackupVPS"
    DATABASE="demo_backup"
    
    DATE=$(date +"%Y-%m-%d_%H-%M-%S")
    BACKUP_FILE="${BACKUP_DIR}/${DATABASE}_${DATE}.sql"
    
    mkdir -p "$BACKUP_DIR"
    
    echo "[$(date)] Memulai backup MySQL..."
    
    mysqldump \
      --single-transaction \
      --routines \
      --triggers \
      --events \
      --set-gtid-purged=OFF \
      "$DATABASE" > "$BACKUP_FILE"
    
    if [ $? -ne 0 ]; then
        echo "[$(date)] Backup MySQL gagal."
        rm -f "$BACKUP_FILE"
        exit 1
    fi
    
    echo "[$(date)] Backup berhasil: $BACKUP_FILE"
    
    if ! rclone copy "$BACKUP_FILE" "$REMOTE_DIR"; then
        echo "[$(date)] Upload ke Google Drive gagal."
        exit 1
    fi
    
    echo "[$(date)] Backup berhasil diupload ke Google Drive."
    
    rm -f "$BACKUP_FILE"
    
    echo "[$(date)] File backup lokal dihapus."
    echo "[$(date)] Proses backup selesai."
  • Simpan file tersebut, kemudian berikan permission agar dapat dijalankan:

    chmod +x /usr/local/bin/backup_mysql_gdrive.sh

2. Mengapa File SQL Langsung Dihapus?

  • File SQL hanya digunakan sebagai file sementara untuk proses upload. Setelah Rclone berhasil mengirimkannya ke Google Drive, file lokal dihapus menggunakan:

    rm -f "$BACKUP_FILE"
  • Dengan cara tersebut, backup tidak menumpuk di storage VPS.

  • File hanya dihapus setelah proses rclone copy berhasil. Jika upload gagal, script berhenti dan file lokal tetap tersedia sehingga dapat diperiksa atau dikirim ulang.

Menguji Script Backup

1. Menguji Script Backup

  • Sebelum menggunakan Cronjob, jalankan script secara manual:

    /usr/local/bin/backup_mysql_gdrive.sh
  • Jika berhasil, output akan terlihat seperti:

    [Wed Sep 16 02:08:08 PM WIB 2026] Memulai backup MySQL...
    [Wed Sep 16 02:08:08 PM WIB 2026] Backup berhasil: /backup/mysql/demo_backup_2026-09-16_14-08-08.sql
    [Wed Sep 16 02:08:46 PM WIB 2026] Backup berhasil diupload ke Google Drive.
    [Wed Sep 16 02:08:46 PM WIB 2026] File backup lokal dihapus.
    [Wed Sep 16 02:08:46 PM WIB 2026] Proses backup selesai.
  • Kemudian periksa direktori lokal:

    ls -lh /backup/mysql/

    File backup yang baru saja dibuat seharusnya sudah tidak ada karena telah dihapus setelah upload berhasil.

  • Untuk memastikan backup berada di Google Drive:

    rclone ls gdrive:BackupVPS
  • Nama file akan menggunakan format tanggal dan waktu, misalnya:

    2167 demo_backup_2026-09-16_14-08-08.sql
  • Dengan demikian, setiap backup memiliki nama yang berbeda dan lebih mudah untuk diidentifikasi saat diperlukan proses restore.

Membuat Retensi Backup Google Drive

1. Mengatur Retensi Backup di Google Drive
Jika backup dilakukan secara rutin, file lama akan terus bertambah di Google Drive. Untuk mencegah penyimpanan penuh, kita dapat menerapkan retensi backup.Pada contoh ini, backup yang berusia lebih dari 30 hari akan dihapus secara otomatis.

  • Buat script cleanup:

    nano /usr/local/bin/cleanup_mysql_backup.sh
  • Isi dengan:

    #!/bin/bash
    
    REMOTE_DIR="gdrive:BackupVPS"
    DATABASE="demo_backup"
    
    echo "[$(date)] Membersihkan backup Google Drive yang lebih dari 30 hari..."
    
    rclone delete "$REMOTE_DIR" \
      --include "${DATABASE}_*.sql" \
      --min-age 30d
    
    if [ $? -eq 0 ]; then
        echo "[$(date)] Cleanup Google Drive selesai."
    else
        echo "[$(date)] Cleanup Google Drive gagal."
        exit 1
    fi
    
    echo "[$(date)] Cleanup selesai."
  • Simpan, kemudian berikan permission:

    chmod +x /usr/local/bin/cleanup_mysql_backup.sh
  • Script tersebut hanya menargetkan file dengan pola:

    demo_backup_*.sql
  • File yang dihapus hanya file yang telah berusia lebih dari 30 hari.

Catatan:
Pada implementasi sebenarnya, sesuaikan nilai DATABASE dengan nama database yang digunakan.

Mengatur Cronjob

1. Menjadwalkan Backup dengan Cronjob

  • Setelah script backup dan cleanup selesai, keduanya dapat dijalankan secara otomatis menggunakan Cronjob.

  • Buka Crontab:

    crontab -e
  • Untuk backup harian pada pukul 02:00:

    0 2 * * * /usr/local/bin/backup_mysql_gdrive.sh >> /var/log/backup_mysql_gdrive.log 2>&1
  • Kemudian jalankan cleanup pada pukul 02:30:

    30 2 * * * /usr/local/bin/cleanup_mysql_backup.sh >> /var/log/cleanup_mysql_backup.log 2>&1
  • Sehingga konfigurasi akhirnya:

    0 2 * * * /usr/local/bin/backup_mysql_gdrive.sh >> /var/log/backup_mysql_gdrive.log 2>&1
    30 2 * * * /usr/local/bin/cleanup_mysql_backup.sh >> /var/log/cleanup_mysql_backup.log 2>&1
  • Periksa konfigurasi dengan:

    crontab -l
  • Dengan konfigurasi tersebut:

    • Backup database berjalan setiap hari pukul 02:00.
    • Hasil backup dikirim ke Google Drive.
    • File SQL lokal dihapus setelah upload berhasil.
    • Cleanup backup lama berjalan pukul 02:30.
    • Backup yang berusia lebih dari 30 hari akan dihapus dari Google Drive.

Memeriksa Log Backup

1. Menjadwalkan Backup dengan Cronjob
Setelah script backup dan cleanup selesai, keduanya dapat dijalankan secara otomatis menggunakan Cronjob.

  • Buka Crontab:

    crontab -e
  • Untuk backup harian pada pukul 02:00:

    0 2 * * * /usr/local/bin/backup_mysql_gdrive.sh >> /var/log/backup_mysql_gdrive.log 2>&1
  • Kemudian jalankan cleanup pada pukul 02:30:

    30 2 * * * /usr/local/bin/cleanup_mysql_backup.sh >> /var/log/cleanup_mysql_backup.log 2>&1
  • Sehingga konfigurasi akhirnya:

    0 2 * * * /usr/local/bin/backup_mysql_gdrive.sh >> /var/log/backup_mysql_gdrive.log 2>&1
    30 2 * * * /usr/local/bin/cleanup_mysql_backup.sh >> /var/log/cleanup_mysql_backup.log 2>&1
  • Periksa konfigurasi dengan:

    crontab -l
  • Dengan konfigurasi tersebut:

    • Backup database berjalan setiap hari pukul 02:00.
    • Hasil backup dikirim ke Google Drive.
    • File SQL lokal dihapus setelah upload berhasil.
    • Cleanup backup lama berjalan pukul 02:30.
    • Backup yang berusia lebih dari 30 hari akan dihapus dari Google Drive.

Menguji Restore Database

1. Menguji Restore Database
Backup sebaiknya tidak hanya dibuat, tetapi juga diuji. Hal ini untuk memastikan file backup benar-benar dapat digunakan ketika diperlukan.

  • Misalnya backup yang ingin digunakan adalah:

    demo_backup_2026-09-16_14-00-01.sql
  • Download file dari Google Drive:

    rclone copy \
      gdrive:BackupVPS/demo_backup_2026-09-16_14-00-01.sql \
      /backup/mysql/
  • Buat database pengujian:

    mysql -e "CREATE DATABASE restore_test;"
  • Kemudian lakukan restore:

    mysql restore_test < /backup/mysql/demo_backup_2026-09-16_14-00-01.sql
  • Periksa hasilnya:

    mysql -e "SELECT * FROM restore_test.pelanggan;"
  • Jika data berhasil ditampilkan, berarti file backup dapat digunakan untuk proses pemulihan database.

Hal yang Perlu Diperhatikan

  • Credential Rclone: batasi akses terhadap konfigurasi Rclone dan jangan membagikannya tanpa alasan yang jelas.

  • Akses Root VPS: jika VPS dikuasai attacker dengan akses root, konfigurasi Rclone yang tersimpan di VPS secara teori dapat diakses.

  • Perlindungan Backup: untuk data penting, pertimbangkan penyimpanan dengan fitur versioning, retention lock, atau immutable backup.

  • Uji Restore: lakukan pengujian restore secara berkala untuk memastikan file backup benar-benar dapat digunakan.

Kesimpulan

Backup database MySQL ke Google Drive dapat dibuat secara otomatis menggunakan kombinasi mysqldump, Rclone, dan Cronjob.

mysqldump digunakan untuk membuat salinan database, Rclone mengirimkan file backup ke Google Drive, sedangkan Cronjob menjalankan proses tersebut secara terjadwal.

Dengan penggunaan penamaan berdasarkan tanggal, penghapusan file lokal setelah upload berhasil, serta retensi 30 hari, penyimpanan backup dapat dikelola tanpa membebani kapasitas disk VPS secara terus-menerus.

Untuk kebutuhan database yang penting, backup juga sebaiknya dilengkapi dengan pengujian restore dan perlindungan terhadap penghapusan backup, sehingga strategi backup tidak hanya berfokus pada pembuatan salinan data, tetapi juga pada kemampuan untuk memulihkan data ketika terjadi masalah.


Artikel Lain

WhatsApp Kami

Support : +6282138153600

Finance : +6285191239466