當數據庫服務器建立並正式投入生產使用後,我們不得不擔憂一個問題:當數據庫遭到破壞後,怎樣安然恢復到最後一次正常的狀態,使得數據的損失達到最小。
我這裡以本博客的wordpress數據為例,來討論並實現全自動話的數據備份。
為了使數據庫備份和恢復的符合我們的實際要求(備份保留七天,每天凌晨備份一次),用一段符合要求的Shell腳本來實現整個備份過程的自動化。
[root@mysqltest ~]# vim mysql-backup.sh
#!/bin/bash
##作者:Barlow##
##最後修訂:2013-6-25##
#腳本作用:備份Mysql數據庫
#
#設定備份保留天數K
K=7
#
TODAY=`date '+%Y%m%d'`
KDAY=`date -d "$TODAY - $K day" '+%Y%m%d'`
BACKDIR=/var/mysqlbak/$TODAY
KDAYDIR=/var/mysqlbak/$KDAY
mkdir -p $BACKDIR
#
# The Password of MySQL
ROOTPASS=******* ##將*替換為實際mysql數據庫的root密碼
#
# Get the Name of Database
DBLIST=`ls -p /var/lib/mysql | grep / | tr -d /`
#
# Backup with Database
for dbname in $DBLIST
do
mysqlhotcopy $dbname -u root -p $ROOTPASS $BACKDIR | logger -t mysqlhotcopy
done
#
#刪除過期備份
if [ -d "$KDAYDIR" ];then
rm -rf $KDAYDIR
exit
fi
改變腳本權限,root具有完全權限,其他用戶沒有任何權限:
[root@mysqltest ~]# chmod 700 mysql-backup.sh
運行一次腳本:
[root@mysqltest ~]# ./mysql-backup.sh
查看運行結果:
[root@mysqltest ~]# ll /var/mysqlbak/20130625/
mysql/ wordpress/
[root@mysqltest ~]# ll /var/mysqlbak/20130625/
總用量 8
drwxr-x---. 2 mysql mysql 4096 6月 25 14:26 mysql
drwxr-x---. 2 mysql mysql 4096 6月 25 14:26 wordpress
可以看到備份已經成功完成。
[root@mysqltest ~]# crontab -e
00 01 * * * /root/mysql-backup.sh
##每天凌晨1點運行一次