mysql備份腳本

生產環境中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腳本內容:
[root@localhost ~]# 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 “” > emailfileecho (date +"%y-%m-%d %H:%M:%S") >> emailfilecd databackupdir

定義備份文件名

dumpfile=mysql_DATE.sql  
gzdumpfile=mysql_
DATE.sql.tar.gz

使用mysqldump備份數據庫,請根據具體情況設置參數

mysqlDir/bin/mysqldumpu user -puserpwdflushlogsx dbname > $dumpfile

壓縮備份文件

if [ ?eq0];thentarczf gzdumpfile dumpfile>> emailfile 2>&1
echo “BackupFileName:gzdumpfile">> emailfile
echo “DataBase Backup Success!” >> emailfilermf dumpfile
else
echo “DataBase Backup Fail!” >> $emailfile
fi

寫日誌文件

echo “——————————————————–” >> logfilecat emailfile >> $logfile

發送郵件通知

cat emailfile|mails"MySQLBackup" email

mysqldailybackup.sh腳本內容:
[root@localhost ~]# 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.logecho> emailfile
echo (date+" emailfile
#

刷新日誌,使數據庫使用新的二進制日誌文件

mysqldir/bin/mysqladminu user -puserpwdflushlogscd 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 [ nextnumeq icounter ]; then
echo “Skip lastest!” > /dev/null
else
dest=dailybackupdir/ binlogname

跳過已經備份的二進制日誌文件

if [ -e dest];thenechoSkipexist binlogname!” > /dev/null
else

備份日誌文件到備份目錄

cp binlogname dailybackupdir
if [ $? -eq 0 ]; then
ifile=expr $ifile + 1
echo “binlognamebackupsuccess!">> emailfile
fi
fi
fi
done
if [ ifileeq0];thenechoNoBinlogBackup!>> emailfile
else
echo “Backup ifileFile(s).">> emailfile
echo “Backup MySQL Binlog OK!” >> $emailfile
fi

發送郵件通知

cat emailfile|mails"MySQLBackup" email

寫日誌文件

echo “——————————————————–” >> logfilecat emailfile >> $logfile
chmod +x

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章