mysql全庫備份/增量備份指令碼

來源:互聯網
上載者:User

標籤: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全庫備份/增量備份指令碼

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.