Blog

Home   /   blog   /   Teknik Backup Database MySQL dengan Bash Script

Teknik Backup Database MySQL dengan Bash Script

Pada tutorial kali ini akan dibahas mengenai teknik backup database MySQL dengan bash script. Teknik ini perlu diketahui karena ketika ingin melakukan backup terhadap semua database dengan mysqldump, terkadang ada beberapa database yang perlu di exclude (seperti database information schema, mysql,dll). Sebenarnya pada mysql sudah menyediakan fitur untuk melakukan backup semua database dengan perintah sebagai berikut:

mysqldump -u root -p --all-databases > all_dbs.sql

Perintah diatas akan menyimpan seluruh database ke dalam sebuah file all_dbs.sql. Akan tetapi pada saat akan melakukan import database ke server yang lain, muncul permasalahan baru, yaitu gagalnya proses import karena sudah ada beberapa database yang exist seperti information scheme dan mysql. Untuk itu diperlukan cara atau teknik agar database yang akan di import bisa terpisah pada file-file sesuai dengan nama databasenya dan tidak menjadi single file.

Berikut ini adalah script untuk melakukan backup database berdasarkan nama databasenya serta menyediakan fitur exclude untuk database yang tidak perlu di backup

#! /bin/bash
TIMESTAMP=$(date +"%F")
BACKUP_DIR="/backup/$TIMESTAMP"
MYSQL_USER="backup"
MYSQL=/usr/bin/mysql
MYSQL_PASSWORD="password"
MYSQLDUMP=/usr/bin/mysqldump
mkdir -p "$BACKUP_DIR/mysql"
 
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/mysql/$db.gz"
done

Perlu diperhatikan bahwa script diatas akan menyimpan user dan password mysql yang akan dijalankan pada cron. Oleh karena itu sangat direkomendasikan agar dibuatkan user khusus untuk melakukan backup ini dengan memberikan privileges sebagai berikut:

  • SHOW DATABASES
  • SELECT
  • LOCK TABLES
  • RELOAD

Leave a Reply

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