mysql 全量备份的脚本,增量备份的脚本

mysql 全量备份的脚本

#!/bin/bash
# Name:全备份脚本
# mysql  scripts
#定义用户名及密码
user=root
userPWD=root
#定义要备份的数据库
database=cloud
#定义完全备份文件存放路径
bakDir=/backup/mysql/weekly_backup
if [ ! -d $bakDir ]
then
mkdir -p "$bakDir"
fi

# 定义容器的名字
CONTAINER=mysql
#显示时间
DATE=`date +%Y%m%d`
#定义日志文件
LogFile=$bakDir/$DATE-full-mysqlbak.log
echo " " >> $LogFile
echo " " >> $LogFile
echo "--------------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >>$LogFile
echo "-----------------" >> $LogFile
cd $bakDir
DumpFile=$DATE.sql.gz
# mysqldump --flush-logs -u$user -p$userPWD --quick $database| gzip >$DumpFile
#使用mysqldump 命令备份制定数据库,并以格式化的时间戳命名备份文件,--single-transaction 是数据库更完整。
# -F 刷新binlog日志 还有-x :表加锁 -B: 指定数据库 ,但是-x和 single-transaction 是不能够同时存在的
# 要实现点对点的备份恢复,或者对于某点的数据完整备份,必须使用--single-transaction 和--master-data=2两个参数,比如主从搭建时候的,因为在--single-transaction参数中,没可以保## 证数据备份的备份时
# 间点的事务一致性
# --single-transaction备份对于数据库的影响时间比较长,影响范围比较大 ,但是加入该参数后,对于多张大表的备份速度肯定会加快

# docker exec $CONTAINER mysqldump  -u$user -p$userPWD -F --master-data=2 --quick --single-transaction $database   | gzip > $DumpFile
docker exec $CONTAINER mysqldump  -u$user -p$userPWD -F  --quick --single-transaction $database   | gzip > $DumpFile
echo "Dump Done" >> $LogFile
echo  "[$DumpFile]Backup Success!" >> $LogFile
# 将超过10天的sql文件删除
find $bakDir/ -type f -mtime +10  -exec rm {} \; > /dev/null 2>&1

# 上传备份的压缩文件
# 文件夹递归同步上
# 一般配合s参数忽略重复文件上传到空间,跳过空间服务器x-cos-meta-md5头部值一样的md5相同的文件
coscmd upload -r  -s /backup/mysql/weekly_backup mysql/  > /dev/null


增量备份
#!/bin/bash
# Name:增量备份
# mysql zbk scripts

#定义数据库用户名及密码
user=root
userPWD=root
#定义数据库
database=cloud
# 定义容器的名字
CONTAINER=mysql
#生成一个新的mysql-bin.00000X文件,如果err日志被清除,则自动新建一个。
docker exec $CONTAINER mysqladmin -u$user -p$userPWD flush-logs
# 检查这个目录是否存在
if [ ! -d /backup/mysql/daily_backup ]
then
mkdir /backup/mysql/daily_backup
fi
#定义增量备份位置
daily_databakDir=/backup/mysql/daily_backup
#定义MYSQL数据日志目录
mysqlDataDir=/var/lib/docker/volumes/docker-compose_mysql_data/_data
#定义增量日志及目录
eMailFile=$daily_databakDir/email.txt
#定义变量DATE格式为20220315
DATE=`date +%Y%m%d`
#定义一个总的logFile日志
logFile=$daily_databakDir/mysql$DATE.log


#美化日志模板
echo "       " > $eMailFile
echo "-----------------------" >> $eMailFile
#时间格式为22-03-15 16:07:17
echo $(date +"%y-%m-%d %H:%M:%S") >> $eMailFile
echo "-------------------------" >> $eMailFile


#定义删除bin日志的时间范围,格式为20220094010540
Time=$(date "-d 3 day ago" +%Y%m%d%H:%M:%S)
#定义需要增量备份数据的时间范围,格式为2022-03-15 01:04:11
StartTime=$(date "-d 1 day ago" +"%Y-%m-%d %H:%M:%S")

###########开始删除操作美化日志标题##############
echo "Delete 3 days before the log" >>$eMailFile

#删除三天前的bin文件,及更新index里的索引记录,美化日志标题
docker exec $CONTAINER mysql -u$user -p$userPWD -e "purge master logs before '${Time}'" && echo "delete 3 days before log" | tee -a $eMailFile

#查找index索引里的bin 2进制文件并赋值给 i。
filename=`cat $mysqlDataDir/binlog.index |awk -F "./" '{print $2}'`
for i in $filename
do
#########开始增量备份操作,美化日志标题###########
echo "$StartTime start backup binlog" >> $eMailFile

#利用mysqlbinlog备份1天前增加的数据,并gzip压缩打包到增量备份/bin/mysqlbinlog -u$user -p$userPWD -d $database --start-datetime="$StartTime" $mysqlDataDir/$i |gzip >> $daily_databakDir/daily$DATE.sql.gz |tee -a $eMailFile
docker exec $CONTAINER mysqlbinlog -u$user -p$userPWD  -d $database --start-datetime="$StartTime" /var/lib/mysql/$i | gzip >> $daily_databakDir/daily$DATE.sql.gz | tee -a $eMailFile

done

#如果以上备份脚本执行成功,接着运行下面的删除脚本
if [ $? = 0 ]
then
# 删除mtime>32的增量日志备份文件
find $daily_databakDir -name "*.log" -type f -mtime +32 -exec rm {} \; > /dev/null 2>&1
cd $daily_databakDir
echo "Daily backup succeed" >> $eMailFile
else
echo "Daily backup fail" >> $eMailFile
#fi结束IF判断
fi


#把变量eMailFile的内容替换logFile内容
cat $eMailFile > $logFile

#如果上面的IF判断失败,再次运行删除mtime>32的增量日志备份文件
find $daily_databakDir -name "*.log" -type f -mtime +32 -exec rm {} \; > /dev/null 2>&1

数据库恢复

#  将binlog日志转换成可以查看的文件
mysqlbinlog --base64-output=decode-rows -v /var/lib/mysql/binlog.000027 --result-file=mysql0002.sql
# 恢复命令
 mysqlbinlog -v  /var/lib/mysql/binlog.000027  --start-position=4  --stop-position=1073803484 | mysql -uroot -123456
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值