Kita perlu untuk melakukan backup pada database jika suatu saat mengalami permasalahan tinggal kita lakukan restore dari file hasil backup tersebut. MySQL sendiri menyediakan solusi perintah yang mudah untuk melakukan backup tersebut :
mysqldump -u root -p --all-databases > all_dbs.sql
Tetapi dengan perintah tersebut hasil backup semua database disimpan dalam satu file. Kita perlu untuk memisahkan hasil backup tersebut untuk setiap nama database, sehingga satu nama database satu file backup.
Caranya yakni dengan membuat file bash script yang melakukan perintah tersebut :
#! /bin/bash
TIMESTAMP=$(date +"%Y%m%d")
BACKUP_DIR="/backup/$TIMESTAMP"
MYSQL_USER="backup"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="password"
MYSQLDUMP=/usr/bin/mysqldump
mkdir -p "$BACKUP_DIR"
databases=$MYSQL --user=$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "(Database|information_schema|performance_schema)"
for db in $databases; do
$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --databases $db | gzip > "$BACKUP_DIR/$db.gz"
done
Supaya script tersebut dieksekusi otomatis, masukkan ke dalam cron. Password dari user mysql perlu disimpan supaya sewaktu file tersebut di eksekusi oleh cron tidak perlu menampilkan prompt masukkan password. Oleh karena itu jangan gunakan user root tetapi buatlah user baru yang fungsinya hanya sebagai backup yang punya priveledges :
– SHOW DATABASES
– SELECT
– LOCK TABLES
– RELOAD
– SHOW VIEW