腳本備份MySQL數據庫和binlog日志


用Mysqldump實現全庫備份+binlog的數據還原

 

首先是為mysql做指定庫文件的全庫備份

vim mysqlbak.sh

#!/bin/bash

#定義數據庫目錄,要能找到mysqldump

mysqlDir=/usr

#定義用於備份數據庫的用戶名和密碼

user=root

userpwd=123456

dbname=db1

#定義備份目錄

databackupdir=/mysqlbak

#定義郵件正文文件

emailfile=$databackupdir/email.txt

#定義郵件地址

email=www@163.com

#定義備份日志文件

logfile=$databackupdir/mysqlbackup.log

#DATE=`date +%Y%m%d`

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備份數據庫,--flush-logs 產生一個新日志

$mysqlDir/bin/mysqldump -u$user -p$userpwd --flush-logs -x $dbname > $dumpfile

#壓縮備份文件

if [ "$?" == 0 ];then

    #把備份出來的文件進行壓縮,壓縮的結果保存在郵件內容中

   tar zcvf $gzdumpfile $dumpfile >> $emailfile 2>&1

   echo "BackupFileName: $gzdumpfile" >> $emailfile

   echo "DataBase Backup Success!" >> $emailfile

    #刪除壓縮前的sql文件

   rm -rf $dumpfile

else

   echo "Database Backup Fail!" >> $emailfile

fi

#寫日志文件

echo "-------------------------------------------------" >> $logfile

cat $emailfile >> $logfile

#發送郵件通知

cat $emailfile| mail -s "Mysql Backup" $email

以上腳本執行后會在備份目錄中產生一個tar.gz的文件,此文件為全庫備份文件,備份成功后給指定的郵箱地址發送郵件,收件內容為截圖內容為備份成功!

接下來是binlog日志的備份腳本

vim binlogbak.sh

#!/bin/bash

#定義數據庫目錄和數據目錄

mysqldir=/usr/local/mysql

datadir=$mysqldir/binlog

#定義用於備份數據庫的用戶名和密碼

user=root

userpwd=123456

#定義備份目錄

databackupdir=/mysqlbak

logbackupdir=$databackupdir/logs

#定義郵件正文文件

emailfile=$databackupdir/email.txt

#定義郵件地址

email=www@163.com

#定義備份日志文件

logfile=$databackupdir/mysqlbackup.log

#DATE=`date +%Y%m%d`

echo "" > $emailfile 

echo $( date +"%Y-%m-%d %H:%M:%S" ) >> $emailfile

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

/usr/bin/mysqladmin -u$user -p$userpwd flush-logs

cd $datadir

#得到二進制日志列表

filelist=`cat mysql_binlog.index`

icounter=0

for file in $filelist

do

    #需要注意的是符號和兩個操作項之間的空格畢不可少,下面也是一樣

  icounter=`expr $icounter + 1`

done

nextnum=0

ifile=0

for file in $filelist

do

binlogname=$file

nextnum=`expr $nextnum + 1`

#跳過最后一個二進制日志 (數據庫當前使用的二進制日志文件)

if [ $nextnum -eq $icounter ];then

   echo "Skip lastest!" > /dev/null

else

   dest=$logbackupdir/$binlogname

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

if [ -e $dest ];then

   echo "Skip exist $binlogname!" > /dev/null

else

#備份日志文件到備份目錄

cp $binlogname $logbackupdir

if [ "$?" == 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

#寫日志文件

echo "-------------------------------------------------" >> $logfile

cat $emailfile >> $logfile

#發送郵件通知

cat $emailfile| mail -s "Mysql Backup" $email

以上腳本執行后會在備份目錄中產生多個沒備份過的binlog日志,文件每日是前一天的增量備份文件,備份成功后給指定的郵箱地址發送郵件,收件內容為截圖內容為備份成功!

編寫計划任務自動執行,每周1,3,24點全庫備份,每天夜里1點日志備份

crontab -e

0 00 * * 1,3 /mysqlbak.sh

0 1 * * * /binlogbak.sh


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM