Shell Script untuk membackup database MySQL

NgoprekProgrammingTutorial
  1. Beranda
  2. Ngoprek
  3. Shell Script untuk membackup database MySQL

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."

Mungkin Kamu juga suka

Memindahkan Kontak HP/SIM ke Google Contacts
Downgrade ke PHP 5.2 di CentOS 5.5

Tinggalkan Balasan

Alamat email Anda tidak akan dipublikasikan. Ruas yang wajib ditandai *

Fill out this field
Fill out this field
Mohon masukan alamat email yang sah.
You need to agree with the terms to proceed

Latest

Tak ditemukan hasil apapun.