CategoriesLinux

Backup masing-masing database MySQL Otomatis Setiap Hari

Backup database MySQL sebenarnya cukup mudah. Kita bisa menggunakan perintah mysldump untuk melakukan backup database MySQL, misalnya:

$ mysqldump -u root -p --all-databases > all_databases.sql

Namun melakukan backup dengan perintah tersebut menimbulkan beberapa masalah, yaitu:

  • Bagaimana bila ada database yang tidak ingin kita backup, misalnya default database seperti information_schema, mysql, performance_schema, atau sys?
  • Bagaimana bila kita ingin melakukan restore database tertentu saja?
  • Bagaimana bila kita ingin melakukan backup rutin setiap hari?

Dalam tulisan ini, saya akan tunjukkan contoh backup script sederhana yang dapat melakukan backup database MySQL secara otomatis sekaligus menyelesaikan permasalahan tersebut.

Backup Script

Simpan script berikut ini di komputer Anda.

#!/bin/bash
# ----------------------------------------------------
# Author: Mahendra Data - mahendra.data@algostudio.net
# License: BSD 3 clause
# ----------------------------------------------------

# ----- CONFIGURATION -----

MYSQL_DEFAULTS_FILE="mysqlbak.cnf"
EXCLUDE_DB=("information_schema" "mysql" "performance_schema" "sys")
BACKUP_DIR="backup"

# ----- BACKUP DATABASES -----

TODAY=$(date +'%Y%m%d')
echo "BACKUP: ${TODAY}"

# Create daily backup directory
BACKUP_DIR="${BACKUP_DIR}/${TODAY}"
rm -rf "${BACKUP_DIR}"  # Remove existing backup directory
mkdir -p "${BACKUP_DIR}"  # Create new backup directory

# Backup each database separately
for db in $(mysql --defaults-extra-file="${MYSQL_DEFAULTS_FILE}" -Bse 'show databases'); do
  # Run the backup procedure if the name of the database is not in EXCLUDE_DB
  if [[ ! " ${EXCLUDE_DB[*]} " =~ ${db} ]]; then
    echo "Backup database: ${db}"
    mysqldump --defaults-extra-file="${MYSQL_DEFAULTS_FILE}" --routines "${db}" > "${BACKUP_DIR}/${db}.sql"
    gzip "${BACKUP_DIR}/${db}.sql"
  fi
done

Script tersebut akan melakukan backup tiap database dalam database ke dalam file yang berbeda-beda dan dikelompokkan berdasarkan hari pembuatan backup. Ada beberapa variable yang dapat disesuaikan dengan kebutuhan Anda, yaitu:

  • Variable EXCLUDE_DB: berisi daftar database yang tidak perlu di backup.
  • Variable BACKUP_DIR: berisi lokasi direktori penyimpanan file backup.
  • Variable MYSQL_DEFAULTS_FILE: berisi lokasi file konfigurasi MySQL yang anda gunakan.

Script tersebut memerlukan file konfigurasi MySQL. Simpan file mysqlbak.cnf di bawah ini di directory yang sama dengan script mysqlbak.sh diatas. Nama script ini harus sesuai dengan isi variable MYSQL_DEFAULTS_FILE di script mysqlbak.sh.

[client]
host="localhost"
user="backup_user"
password="backup_user123"

Username dan password MySQL tersebut sengaja diletakkan terpisah demi keamanan. Jangan lupa menyesuaikan konten file mysqlbak.cnd diatas dengan username dan password MySQL yang Anda gunakan.

Untuk menguji apakah script tersebut bisa berjalan dengan baik, jalankan perintah:

$ bash mysqlbak.sh

Hasil file backup akan disimpan di dalam directory yang tertulis dalam variable BACKUP_DIR.

Membuat cron job

Berikutnya kita perlu membuat cron job untuk menjalankan script diatas secara otomatis setiap hari. Langkah pertama, editlah cron job dengan perintah:

$ crontab -e

Lalu tambahkan baris perintah berikut untuk menjalankan script tersebut tiap tengah malam.

0 0 * * * /bin/bash /full/path/to/script/mysqlbak.sh

Pastikan /full/path/to/script/ Anda ganti sesuai dengan lokasi script di komputer Anda.

Bila ingin merubah jam backup, silahkan merujuk ke Crontab.guru untuk mengubah waktu script tersebut dijalankan.

Selesai, script backup MySQL akan berjalan otomatis setiap tengah malam.

Leave a Reply

Your email address will not be published. Required fields are marked *