本篇文章主要讲如何使用shell实现mysql全量,增量备份。增量备份在周一-周六凌晨3点,会复制mysql-bin.00000*到指定目录;而全量备份则使用mysqldump将所有的数据库导出,每周日凌晨3点执,并会删除上周留下的mysq-bin.00000*。然后对mysql的备份操作会保留在bak.log文件中。如下图:
实现:
1.编写全量备份脚本
# vim /Server/Scripts/DBFullyBak.sh //添加以下内容
#!/bin/bash #use mysqldump to Fully backup mysql data per week! #Author:xiaoxiao #DATE:2020-02-08 #E-Mail:77368447@qq.com #username 、password、dbname username="root" password="123456" dbname="DB" beginTime=`date +"%Y年%m月%d日 %H:%M:%S"` #Backup Directory bakDir=/data/mysql/backup #Log File logFile=/data/mysql/backup/bak.log #Backup File nowDate=`date +%Y%m%d` dumpFile="${dbname}_${nowDate}.sql" gzDumpFile="${dbname}_${nowDate}.sql.tgz" cd $bakDir # Full Backup /usr/bin/mysqldump -u${username} -p${password} --quick --events --databases ${dbname} --flush-logs --delete-master-logs --single-transaction>$dumpFile #tar /bin/tar -zvcf $gzDumpFile $dumpFile /bin/rm $dumpFile endTime=`date +"%Y年%m月%d日 %H:%M:%S"` echo 开始:$beginTime 结束:$endTime $gzDumpFile succ >> $logFile #delete all full backup cd $bakDir/daily /bin/rm -f *
2.编写增量备份脚本
# vim /Server/Scripts/DBDailyBak.sh //内容为下
#!/bin/bash #use cp to backup mysql data everyday! #Author:xiaoxiao #Date:2020-02-08 #E-mail:77368447@qq.com #username password username=root password=123456 # 增量备份时复制mysql-bin.00000*的目标目录,提前手动创建这个目录 BakDir=/data/mysql/backup/daily # 日志文件 LogFile=/data/mysql/backup/bak.log # mysql的数据目录 BinDir=/var/lib/mysql # mysql的index文件路径,放在数据目录下的 BinFile=/var/lib/mysql/mysql-bin.index # 这个是用于产生新的mysql-bin.00000*文件 /usr/bin/mysqladmin -u${username} -p${password} flush-logs Counter=`wc -l $BinFile | awk '{print $1}'` NextNum=0 # 这个for循环用于比对$Counter,$NextNum这两个值来确定文件是不是存在或最新的 for file in `cat $BinFile` do base=`basename $file` NextNum=`expr $NextNum + 1` if [ $NextNum -eq $Counter ] then echo $base skip! >> $LogFile else dest=$BakDir/$base #test -e用于检测目标文件是否存在,存在就写exist!到$LogFile去 if(test -e $dest) then echo $base exist! >> $LogFile else cp $BinDir/$base $BakDir echo $base copying >> $LogFile fi fi done echo `date +"%Y年%m月%d日 %H:%M:%S"` $Next Bakup succ! >> $LogFile
3.设置crontab任务,每天执行备份脚本
# crontab -l //内容为下
#每个星期日凌晨3:00执行完全备份脚本 0 3 * * 0 /Server/Scripts/DBFullyBak.sh >/dev/null 2>&1 #周一到周六凌晨3:00做增量备份 0 3 * * 1-6 /Server/Scripts/DBDailyBak.sh >/dev/null 2>&1 |
脚本附件:
发表评论