MySQL全量备份和增量备份脚本

时间:2022-09-24 10:12:44

1.增量备份

  1 mkdir -p /home/mysql/backup/daily

脚本

  1 cd /home/mysql
  2 vi binlogbak.sh
  3 
  4 #!/bin/bash
  5 export LANG=en_US.UTF-8
  6 BakDir=/home/mysql/backup/daily
  7 BinDir=/home/mysql
  8 LogFile=/home/mysql/backup/binlog.log
  9 BinFile=/home/mysql/logindex.index
 10 mysqladmin -uroot -proot123 flush-logs
 11 #这个是用于产生新的mysql-bin.00000*文件
 12 Counter=`wc -l $BinFile |awk '{print $1}'`
 13 NextNum=0
 14 #这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的。
 15 for file in `cat $BinFile`
 16 do
 17     base=`basename $file`
 18     #basename用于截取mysql-bin.00000*文件名,去掉./mysql-bin.000005前面的./
 19     NextNum=`expr $NextNum + 1`
 20     if [ $NextNum -eq $Counter ]
 21     then
 22         echo $base skip! >> $LogFile
 23     else
 24         dest=$BakDir/$base
 25         if(test -e $dest)
 26         #test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去。
 27         then
 28             echo $base exist! >> $LogFile
 29         else
 30             cp $BinDir/$base $BakDir
 31             echo $base copying >> $LogFile
 32         fi
 33     fi
 34 done
 35 echo `date +"%Y年%m月%d日 %H:%M:%S"` Bakup succ! >> $LogFile

 

2.全量备份

  1 vi databak.sh
  2 
  3 #!/bin/bash
  4 export LANG=en_US.UTF-8
  5 BakDir=/home/mysql/backup
  6 LogFile=/home/mysql/backup/bak.log
  7 Date=`date +%Y%m%d`
  8 Begin=`date +"%Y年%m月%d日 %H:%M:%S"`
  9 cd $BakDir
 10 DumpFile=$Date.sql
 11 GZDumpFile=$Date.sql.tgz
 12 mysqldump -uroot -proot123 --all-databases --flush-logs --delete-master-logs --single-transaction > $DumpFile
 13 tar -czvf $GZDumpFile $DumpFile
 14 rm $DumpFile
 15 
 16 count=$(ls -l *.tgz |wc -l)
 17 if [ $count -ge 5 ]
 18 then
 19 file=$(ls -l *.tgz |awk '{print $9}'|awk 'NR==1')
 20 rm -f $file
 21 fi
 22 #只保留过去四周的数据库内容
 23 
 24 Last=`date +"%Y年%m月%d日 %H:%M:%S"`
 25 echo 开始:$Begin 结束:$Last $GZDumpFile succ >> $LogFile
 26 cd $BakDir/daily
 27 rm -f *
 28 

 

3.计划任务

  1 vi /etc/crontab
  2 
  3 #每个星期日凌晨3:00执行完全备份脚本
  4 0 3 * * 0 /home/mysql/databak.sh >/dev/null 2>&1
  5 #周一到周六凌晨3:00做增量备份
  6 0 3 * * 1-6 /home/mysql/binlogbak.sh >/dev/null 2>&1

 

4.计划任务生效

  1 crontab /etc/crontab
  2 
  3 
  4 crontab -l