最近一直在思考如何增量备份二进制日志,这样一来我们就可以用mysqldump +二进制全备或者利用xtrabackup+二进制备份

思想:利用mysql-bin.index,如果是第一次备份,就将mysql-bin.index中的所有文件都复制到备份目录下,然后保存备份后二进制日志的序号到一个文件中backbinlogpostion
        增量备份时(非第一备份),就用backbinlogpostion存的序号与当前mysql_bin.index中的比较,如果序号小于mysql-bin.index的序号,则复制该二进制文件到备份目录

#!/bin/bash
#################################################################
#name:incrementalbackdb
#function:incremental-backup for mysql everyday
#finish-time:2015-04-02 by yzx@tianqu.com.cn
#################################################################
BinDir=/usr/local/mysql/data
BackupDir=/usr/backupyzx
BinLogFile=/usr/local/mysql/data/mysql-bin.index
BackLogPostion=0
BackupLog=${BackupDir}/backup.log
printN=
BinLogPostion=$(wc -l $BinLogFile|awk '{print $1}')
#get Binnary log sequ
LastSeqBinLog=$(basename $(tail -n 1 $BinLogFile))
LastBinLogPostion=${LastSeqBinLog##*0}
#before you backup,you should flush logs
/usr/local/mysql/bin/mysqladmin -uroot -p'tianqu' flush-logs
echo "begin increment-backup,time is:" $(date +'%Y-%m-%d %H:%M:%S') >>$BackupLog
if [ -e ${BackupDir}/backbinlogpostion  ];then
#取出backbinlogpostion中二进制的序号,例如mysql-bin.000002,保存的序号就是2
    BackLogPostion=$(cat ${BackupDir}/backbinlogpostion)
#如果当前二进制的序号与备份的二进制序号相同
    if [ ${LastBinLogPostion} -eq $BackLogPostion ];then
        echo "backup skiped,backup success!" >>${BackupLog}
    else
#取出序号的之间的差值
        printN=$((${LastBinLogPostion}-${BackLogPostion}))
        echo $printN
        q=$((${BackLogPostion}+1))
        for file in $(tail -n ${printN} ${BinLogFile});do
            basefile=$(basename ${file})
            if [ $q -ge ${LastBinLogPostion} ];then
            break;
            fi
            cp -pd ${BinDir}/${basefile} ${BackupDir}
            echo ${basefile}" is copying...">>${BackupLog}
            ((q++))
        done
    echo ${LastBinLogPostion} >${BackupDir}/backbinlogpostion
    fi
else
#如果是第一次备份,则创建backbinlogpostion,记录当前已经复制二进制的日志,方便第二次备份时,只备份新增的部分
    touch ${BackupDir}/backbinlogpostion
    i=1
    for file in $(cat ${BinLogFile});do
        basefile=$(basename ${file})
        if [ $i -eq ${BinLogPostion} ];then
        echo ${basefile##0} >${BackupDir}/backbinlogpostion
        fi
        if [ $i -eq $((${BinLogPostion}+1)) ];then
        break;
        fi
        cp -pd ${BinDir}/${basefile} ${BackupDir}
        echo ${basefile}" is copying...">>${BackupLog}
        ((i++))
    done
fi
echo "increment-backup finished,time is :" $(date +'%Y-%m-%d %H:%M:%S')>>$BackupLog
#Delete old file
#将当前备份的文件转移到远程机器,然后删除本地的存档
#find ${BackupDir} -type f -mtime +15 -exec rm -rf {} \;
#/usr/bin/rsync -vzrtopg --progress ${BackupDir} rsyncusr@192.168.1.201::backup/backdb/ --password-file=/usr/local/etc/rsyncd.sec

转载于:https://blog.51cto.com/linuxybird/1638035

mysql二进制增量备份相关推荐

  1. mysql数据库二进制备份_MySQL数据库如何创建全库及二进制增量备份脚本

    MySQL数据库如何创建全库及二进制增量备份脚本 发布时间:2020-05-25 11:52:55 来源:51CTO 阅读:206 作者:三月 下面讲讲关于MySQL数据库如何创建全库及二进制增量备份 ...

  2. 实验——MySQL数据库增量备份恢复

    目录 一.MySQL数据库增量备份恢复 1.1 物理冷备份,开启服务 1.2 开启二进制日志文件 1.3 创建库和表,进行完全备份和增量备份 1.4 进行正常操作和误操作,进行增量备份 1.5 查看增 ...

  3. mysql完全备份 二进制日志,MySQL二进制日志备份和恢复详解

    原文链接:http://www.showerlee.com/archives/681 ****经实践,该教程ok,特在此分享**** 基本概念 定义: 二进制日志包含了所有更新了数据或者已经潜在更新了 ...

  4. MySQL 数据增量备份

    目录 MySQL 数据增量备份 binlog日志 日志概述 启用日志 自定义日志存储目录和日志文件名 手动生成新的日志文件 清理日志(删除已有的日志文件) 查看日志文件内容 使用binlog日志恢复数 ...

  5. linux mysql定时增量备份_Mysql 日常备份和增量备份脚本(Linux)

    适合对象 本文是在linux下,mysql 4.1.14版本下测试的,经过适当修改可能适合mysql 4.0,5.0及其其他版本. 本文适合于没有启动复制功能的mysql,如果启动了复制,可能不需要采 ...

  6. mysql定时增量备份_Mysql日常自动备份和增量备份脚本

    序 你是否在寻找一个MySQL备份脚本? 适合对象 本文是在Linux下,mysql 4.1.14版本下测试的,经过适当修改可能适合mysql 4.0,5.0及其其他版本. 本文适合于没有启动复制功能 ...

  7. kafka对接mysql_【Canal】利用canal实现mysql实时增量备份并对接kafka

    简介 canal 1.1.1版本之后, 默认支持将canal server接收到的binlog数据直接投递到MQ, 目前默认支持的MQ系统有: kafka: https://github.com/ap ...

  8. 实战-MySQL定时增量备份(2)

    阅读本文大约需要 9 分钟 实战-MySQL定时全量备份(1) 实战-MySQL定时增量备份(2) 实战-将MySQL备份上传到私有云(3) 概要 引言 增量备份 恢复增量备份 定时备份 引言 在产品 ...

  9. C 实现Mysql增量备份_window下mysql数据库增量备份实现教程

    mysql增量备份(mysql5.1 之后),linux下mysql增量备份 网上资料很多.这里只说明window下mysql增量备份. 定义: mysql数据库会以二进制的形式,自动把用户对mysq ...

  10. mysql实时增量备份

    启用binlog日志实现对数据的增量备份: 日志存储位置: /var/lib/mysql/ 日志名称:主机名-bin.000001 或mysqld-bin.000001 binlog日志概述:二进制日 ...

最新文章

  1. 洛谷P1450:硬币购物(背包、容斥)
  2. 作者:洪学海(1967-),男,博士,中国科学院计算技术研究所研究员,信息技术战略研究中心常务副主任。...
  3. C#自定义控件:WinForm将其它应用程序窗体嵌入自己内部
  4. 如何保护 .NET 应用的安全?
  5. Mac 下配置XAMPP
  6. Cognos 11.0快速开发指南 Ⅱ
  7. Axure8与Axure9交互差异总结-1 移动元件交互事件的差异
  8. 什么是系统时钟?什么是时钟系统?时钟系统有什么作用?
  9. 思考深度学习的泛化能力
  10. 远程视频监控必备专业知识
  11. centos7.5换源
  12. 北京科技大学本科毕业论文答辩PPT模板
  13. sqlserver 之STUFF的运用
  14. 感动中国感动谁(转)
  15. 产品需求模型之贪嗔痴
  16. 上传失败 已保存至草稿_抖音上传失败保存草稿箱怎么回事,抖音上传失败已保存至草稿箱...
  17. iPhone屏蔽APP广告的方法
  18. 网红程序员,粉丝打赏年入 10 万美元!
  19. 群辉 虚拟linux,黑群晖DSM6.2.1在centos7的KVM里面总是crash
  20. python人脸特征提取_实现人脸识别、人脸68个特征点提取,或许这个 Python 库能帮到你!...

热门文章

  1. Python单下划线与双下划线
  2. 基于深度极限学习机DELM的分类
  3. Python图像的基本操作
  4. python 删除满足条件的行
  5. 爬虫实战(一)之爬取房天下新房数据
  6. 老板下死命令:必须将20M文件从30秒压缩到1秒,我是如何做到的?
  7. Android studio中的一次编译报错’Error:Execution failed for task ':app:transformClassesWithDexForDebug‘,困扰了两天
  8. SurfaceView浅析
  9. 关于Python脚本的前两行
  10. 会java需要多久能学会python_学好Python,c++ 和Java要多久?