mysql 备份_自动备份MySQL的binlog

实践环境:MySQL8 CentOS7

目的:将binlog解码后备份到某特定路径下,备份的文件名沿用binlog的原文件名,以.log后缀作为结尾。

思路:

获取binlog名称列表

1. 命令格式:

mysql -h$dbhost -u$username -p$password -P$port -e 'show binary logs;

2. 上一步获取列表的最后一个binlog不做备份,其他都备份。

3. 对已经备份过的binlog,不做二次备份。

通过文件名来对比是否备份过。

4. Base64解码后,存放为*.log文件。

shell脚本backupBinlog.sh如下:

#!/bin/bashdbhost="rm-test.mysql.rds.aliyuncs.com"username="root"password="rootpw"port="3306"backupDir="/backup/dblog/Binlog"binlogs=`mysql -h$dbhost -u$username -p$password -P$port -e 'show binary logs;' | awk  '$1 ~ /mysql-bin.*/ {print $1}'`num=0for binlog in $binlogs;  do  num=`expr $num + 1`  echo "数据库当前的binlog:"$binlog  done# 此处获取到binlog的备份文件,过滤掉路径,筛选出文件名existlogs=`ls -lh $backupDir/mysql-bin.* | awk '{print $9}' | awk -F'/' '{print $5}'`for existlog in $existlogs;  do  echo "当前的备份有:"$existlog  doneindex=0for binlog in $binlogs;  do  index=`expr $index + 1`  # 如果是最后一个binlog,就不做备份  if [ "$index" == "$num" ];then    echo "No need backup last binlog [$index]:"$binlog  else    backuped=false    for existlog in $existlogs;      do      # 备份的文件名和binlog文件名一致,说明已备份过      if [ "${existlog%.*}" == "$binlog" ];then        backuped=true        break      fi      done    if $backuped;then      echo "No need backup $binlog cause it backuped"    else      echo "Now backup binlog[$index]:$binlog"      #解码后备份到backupDir路径下      mysqlbinlog -u$username -p$password -h$dbhost -P$port --read-from-remote-server -vv --base64-output=decode-rows $binlog > $backupDir/$binlog.log    fi  fi  done

执行结果示例:

  • 第一次执行,备份binlog

[yyxz@test Binlog]$ ./backupBinlog.sh mysql: [Warning] Using a password on the command line interface can be insecure.数据库当前的binlog:mysql-bin.000092数据库当前的binlog:mysql-bin.000093数据库当前的binlog:mysql-bin.000094数据库当前的binlog:mysql-bin.000095ls: cannot access /backup/dblog/Binlog/mysql-bin.*: No such file or directoryNow backup binlog[1]:mysql-bin.000092mysqlbinlog: [Warning] Using a password on the command line interface can be insecure.Now backup binlog[2]:mysql-bin.000093mysqlbinlog: [Warning] Using a password on the command line interface can be insecure.Now backup binlog[3]:mysql-bin.000094mysqlbinlog: [Warning] Using a password on the command line interface can be insecure.No need backup last binlog [4]:mysql-bin.000095

- 查看备份结果

[yyxz@test Binlog]$ ll -htotal 356M-rwxrwxr-x 1 yyxz yyxz 1.2K Dec  2 15:12 backupBinlog.sh-rw-rw-r-- 1 yyxz yyxz 120M Dec  2 15:13 mysql-bin.000092.log-rw-rw-r-- 1 yyxz yyxz  43M Dec  2 15:13 mysql-bin.000093.log-rw-rw-r-- 1 yyxz yyxz 194M Dec  2 15:13 mysql-bin.000094.log

- 第二次备份,可以看到已经备份过的文件不会再备份

[yyxz@test Binlog]$ ./backupBinlog.sh mysql: [Warning] Using a password on the command line interface can be insecure.数据库当前的binlog:mysql-bin.000092数据库当前的binlog:mysql-bin.000093数据库当前的binlog:mysql-bin.000094数据库当前的binlog:mysql-bin.000095当前的备份有:mysql-bin.000092.log当前的备份有:mysql-bin.000093.log当前的备份有:mysql-bin.000094.logNo need backup mysql-bin.000092 cause it backupedNo need backup mysql-bin.000093 cause it backupedNo need backup mysql-bin.000094 cause it backupedNo need backup last binlog [4]:mysql-bin.000095

最后,通过设置定时任务也可以每间隔10分钟就做一次定时备份动作

[yyxz@test Binlog]$ crontab -l */10 * * * * /backup/dblog/Binlog/backupBinlog.sh

题图:

女儿 海洋 海龟 心桥 数不清的小心心 生日蛋糕 我

fd2b83268cb9b3a309a6eae1446e9adb.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值