標籤:blank 資料庫 target mysql 周期性
http://hongge.blog.51cto.com/
生產環境中Mysql資料庫的備份是周期性重複的操作,所以通常是要編寫指令碼實現,通過crond計劃任務周期性執行備份指令碼
mysqldump備份方案:
周日淩晨1點全庫備份
周一到周六淩晨每隔4個小時增量備份一次
設定crontab任務,每天執行備份指令碼
# crontab –e
#每個星期日淩晨1:00執行完全備份指令碼
0 1 * * 0 /root/mysqlfullbackup.sh >/dev/null 2>&1
#周一到周六每隔4個小時增量備份一次
0 */4 * * 1-6 /root/mysqldailybackup.sh >/dev/null 2>&1
mysqlfullbackup.sh指令碼內容:
[[email protected] ~]# cat mysqlfullbackup.sh
#!/bin/sh
# Name:mysqlFullBackup.sh
# 定義資料庫目錄
mysqlDir=/usr/local/mysql
# 定義用於備份資料庫的使用者名稱和密碼
user=root
userpwd=123456
dbname=test_db
# 定義備份目錄
databackupdir=/opt/mysqlbackup
[ ! -d $databackupdir ] && mkdir $databackupdir
# 定義郵件內文檔案
emailfile=$databackupdir/email.txt
# 定義郵件地址
[email protected]
# 定義備份記錄檔
logfile=$databackupdir/mysqlbackup.log
DATE=`date -I`
echo "" > $emailfile
echo $(date +"%y-%m-%d %H:%M:%S") >> $emailfile
cd $databackupdir
# 定義備份檔案名
dumpfile=mysql_$DATE.sql
gzdumpfile=mysql_$DATE.sql.tar.gz
# 使用mysqldump備份資料庫,請根據具體情況設定參數
$mysqlDir/bin/mysqldump -u$user -p$userpwd --flush-logs -x $dbname > $dumpfile
# 壓縮備份檔案
if [ $? -eq 0 ]; then
tar czf $gzdumpfile $dumpfile >> $emailfile 2>&1
echo "BackupFileName:$gzdumpfile" >> $emailfile
echo "DataBase Backup Success!" >> $emailfile
rm -f $dumpfile
else
echo "DataBase Backup Fail!" >> $emailfile
fi
# 寫記錄檔
echo "--------------------------------------------------------" >> $logfile
cat $emailfile >> $logfile
# 發送郵件通知
cat $emailfile | mail -s "MySQL Backup" $email
mysqldailybackup.sh指令碼內容:
[[email protected] ~]# cat mysqldailybackup.sh
#!/bin/sh
# Name:mysqlDailyBackup.sh
# 定義資料庫目錄和資料目錄
mysqldir=/usr/local/mysql
datadir=$mysqldir/data
# 定義用於備份資料庫的使用者名稱和密碼
user=root
userpwd=123456
# 定義備份目錄,每日備份檔案備份到$dataBackupDir/daily
databackupdir=/opt/mysqlbackup
dailybackupdir=$databackupdir/daily
[ ! -d $dailybackupdir ] && mkdir -p $databackupdir/daily
# 定義郵件內文檔案
emailfile=$databackupdir/email.txt
# 定義郵件地址
[email protected]
# 定義記錄檔
logfile=$databackupdir/mysqlbackup.log
echo "" > $emailfile
echo $(date +"%y-%m-%d %H:%M:%S") >> $emailfile
#
# 重新整理日誌,使資料庫使用新的二進位記錄檔
$mysqldir/bin/mysqladmin -u$user -p$userpwd flush-logs
cd $datadir
# 得到二進位日誌列表
filelist=`cat mysql-bin.index`
icounter=0
for file in $filelist
do
icounter=`expr $icounter + 1`
done
nextnum=0
ifile=0
for file in $filelist
do
binlogname=`basename $file`
nextnum=`expr $nextnum + 1`
# 跳過最後一個二進位日誌(資料庫當前使用的二進位記錄檔)
if [ $nextnum -eq $icounter ]; then
echo "Skip lastest!" > /dev/null
else
dest=$dailybackupdir/$binlogname
# 跳過已經備份的二進位記錄檔
if [ -e $dest ]; then
echo "Skip exist $binlogname!" > /dev/null
else
# 備份記錄檔到備份目錄
cp $binlogname $dailybackupdir
if [ $? -eq 0 ]; then
ifile=`expr $ifile + 1`
echo "$binlogname backup success!" >> $emailfile
fi
fi
fi
done
if [ $ifile -eq 0 ];then
echo "No Binlog Backup!" >> $emailfile
else
echo "Backup $ifile File(s)." >> $emailfile
echo "Backup MySQL Binlog OK!" >> $emailfile
fi
# 發送郵件通知
cat $emailfile | mail -s "MySQL Backup" $email
# 寫記錄檔
echo "--------------------------------------------------------" >> $logfile
cat $emailfile >> $logfile
http://hongge.blog.51cto.com/
mysql全庫備份/增量備份指令碼