Salah satu tugas yang paling penting setiap sysadmin adalah perlunya sering melakukan backup database MySQL/MariaDB. Dalam banyak kasus, database adalah media penyimpanan data yang sudah tidak dapat terelakkan lagi dan kebanyakan menggunakan MySQL bahkan sekarang sudah banyak yang beralih menggunakan MariaDB dengan kemampuan yang sama dengan MySQL tetapi dengan pengembangan yang lebih powerfull. Sementara sebagian besar sysadmin dalam membuat backup sering melalui phpmyadmin ataupun dengan mendata satu demi satu database yang ada, sehingga bisa terjadi kelewatan atau terlupakan jika ada database baru yang terbentu.
Nah.. berikut adalah kode commandline linux (bisa juga untuk Mac) untuk melakukan backup semua database yang ada di server tanpa harus mendata satu-satu databasenya, sehingga dengan 1 cron bisa terbackup semua database berikut kodenya:
#!/bin/bash
HOST="127.0.0.1"
PORT=3306
USER="userdb"
PASSWORD="passwd"
databases=`mysql -h"$HOST" -P$PORT -u"$USER" -p"$PASSWORD" -e "SHOW DATABASES;" | tr -d "| " | grep -v Database`
for db in $databases; do
if [[ "$db" != "information_schema" ]] && [[ "$db" != "performance_schema" ]] && [[ "$db" != "mysql" ]] && [[ "$db" != _* ]] ; then
echo "Dumping database: $db"
mysqldump --single-transaction --skip-comments -c --replace --routines --skip-add-locks --force -h"$HOST" -P$PORT -u"$USER" -p"$PASSWORD" --add-drop-table -i $db | sed -E 's/DEFINER=`[^`]+`@`[^`]+`//g' | gzip -9 -c > `date +%Y%m%d`.$db.sql.gz
fi
done
untuk melakukan restore bisa menggunakan kode berikut
gunzip < /tmp/filedatabase.sql.gz | mysql -h"$HOST" -P$PORT -u"$USER" -p"$PASSWORD" nama_database
Semoga script ini bisa bermanfaat bagi sysadmin yang lain.