Menurut saya cara membackup MySQL yang paling baik yaitu dengan membuat mirrornya yang selalu di-sync. Tetapi ini bukan bahasan tentang itu kali ini. Cara yang lebih cepat adalah dengan menggunakan perintah mysqldump. Lalu bagaimana kalo membackup banyak database secara rutin? Gampang saja, buat shell scriptnya.
Sebagai catatan saya, shell script ini sangat membantu untuk membackup database MySQL. Selain praktis untuk di-cron, juga ada fitur untuk merotasi backup, contoh di bawah, menyimpan 7 backup yang terakhir, sehingga bisa menghemat space juga. Scriptnya cukup mudah untuk newbi seperti saya.
Sebelum membuat shell scriptnya, buat dulu satu user di MySQL yang nanti akan digunakan untuk membackup dari script shell ini. Privilegenya ga perlu dihantam semua, lebih baik dibatasi minimal seperti ini:
SELECT, INDEX, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, SHOW VIEW
Berikut contoh shell scriptnya:
#!/bin/bash #config NOW=$(date +"%Y%m%d-%H%M%S") #mysql MYSQLUSER="user" MYSQLPASS="password" MYSQLHOST="localhost" MYSQL="$(which mysql)" MYSQLDUMP="$(which mysqldump)" #local backup FOLDER="/mysql" DIRBAK="/home/backup/backup_files"$FOLDER DIRBAKTEMP="/temp" BAKFILENAME="backup_mysql.gz" #compression GZIP="$(which gzip)" TAR="/bin/tar" echo "" echo "ROTATING FOLDERS..." echo "--------------------------------------------------------" rm -rf $DIRBAK/07_old [ -d $DIRBAK/06 ] && mv $DIRBAK/06 $DIRBAK/07_old [ -d $DIRBAK/05 ] && mv $DIRBAK/05 $DIRBAK/06 [ -d $DIRBAK/04 ] && mv $DIRBAK/04 $DIRBAK/05 [ -d $DIRBAK/03 ] && mv $DIRBAK/03 $DIRBAK/04 [ -d $DIRBAK/02 ] && mv $DIRBAK/02 $DIRBAK/03 [ -d $DIRBAK/01 ] && mv $DIRBAK/01 $DIRBAK/02 mkdir -p $DIRBAK/01/ mkdir -p $DIRBAK$DIRBAKTEMP/ echo "Done." echo "" echo "PERFORMING MYSQL BACKUP..." echo "--------------------------------------------------------" DBS="$($MYSQL -u $MYSQLUSER -h $MYSQLHOST -p$MYSQLPASS -Bse 'show databases')" SKIPDBS="test test01 " for db in $DBS do skipdb=-1 if [ "$SKIPDBS" != "" ]; then for i in $SKIPDBS do [ "$db" == "$i" ] && skipdb=1 || : done fi if [ "$skipdb" == "-1" ] ; then DIRMYSQL=$DIRBAK/01/$db.$NOW.gz echo "DB Backup:" $db $DIRMYSQL $MYSQLDUMP -u $MYSQLUSER -h $MYSQLHOST -p$MYSQLPASS $db | $GZIP -9 > $DIRMYSQL fi if [ "$skipdb" == "1" ] ; then echo "DB Backup Skipped:" $db fi done echo "Done." echo "" echo "PERFORMING COMPRESSION..." echo "--------------------------------------------------------" DIRS2="$DIRBAK/01/" cd $DIRS2 DIRFILES2=$DIRBAK$DIRBAKTEMP/$BAKFILENAME echo "Backup:" $DIRFILES2 $TAR cvf $DIRFILES2 *.* echo "Done."