• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    mysql增量备份及断点恢复脚本实例

    简介

    增量备份是指在一次全备份或上一次增量备份后,以后每次的备份只需备份与前一次相比增加或者被修改的文件。这就意味着,第一次增量备份的对象是进行全备后所产生的增加和修改的文件;第二次增量备份的对象是进行第一次增量备份后所产生的增加和修改的文件,如此类推。

    目的

    解决完全备份中时间长、恢复慢的问题,采取了增量备份

    特点

    优:无重复数据,备份量不大,时间短
    缺:需要上次完全备份及完全备份后的增量备份才能恢复,需对增量备份逐个反复恢复,操作繁琐

    实现方式

    通过mysql的二进制日志间接实现增量备份:
    二进制日志保存了所有更新或可能更新的数据
    二进制日志在mysql启动时开始记录,且会重新创建新的日志文件
    需定时执行flush logs方法重新创建日志,生成二进制文件序列

    实验环境:

    安装了mysql5.7数据库的一台centos7虚拟机

    操作过程:

    一、增量备份

    1、在配置文件中添加二进制日志

    vim /etc/my.cnf
    [mysqld] #在此模块下添加
    log-bin=mysql-bin #二进制日志

    2、重启服务,并查看二进制日志

    systemctl restart mysqld.service
    cd /usr/local/mysql/data/
    mysqlbinlog --no-defaults mysql-bin.000001


    3、在数据库自由创建数据库、表,作为实验模板


    4、对school数据库进行完全备份

    mysqldump -uroot -pabc123 school > /opt/school.sql

    5、刷新日志,生成新的日志,注意:之前数据库的操作写入编号为000001的日志中,新生成的000002的日志为空

    mysqladmin -uroot -pabc123 flush-logs #刷新日志
    mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000001 #查看000001日志
    mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 #查看000002日志
    #--base64-output=decode-rows -v:避免文件中乱码,前面的查看命令也可以使用



    6、新添加mysql数据库操作,然后刷新日志,进行增量备份

    use school;
    mysql>indert into info (id,name,score) values (3,'aaa',78);
    mysql>delete from info where name='tom'; #误操作
    mysql> insert into info (id,name,score) values (4,'bbb',64);
    mysqladmin -uroot -pabc123 flush-logs #刷新日志,生成000003
    #此次增量备份已记录到000002日志文件中



    7、删除info表

    mysql -uroot -pabc123 -e 'use school;drop table info;'

    8、恢复完全备份,然后恢复增量备份

    mysql -uroot -pabc123 school /opt/school.sql #完全备份还原

    mysqlbinlog --no-defaults mysql-bin.000002 | mysql -uroot -p


    那么,此处暴露出一个问题,如果出现误操作,还原备份时就会出现错误,并不能实现理想的备份,达到真正的目的。此时,就需要断链恢复(属于恢复增量备份的特殊用法),即在还原时只恢复正确的数据库操作。

    二、断链恢复

    在操作断链恢复前,需要还原到未进行增量备份还原的状态,如图


    基于时间点

    2018-09-04 16:43:52 错误操作时间 (开头加载到此时间点结束)
    2018-09-04 16:44:32 正确操作时间 (从此时间点再次开始加载) 从此时间点再次开始加载

    mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 #查看000002日志


    mysqlbinlog --no-defaults --stop-datetime='2018-09-04 16:43:52' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p
    mysqlbinlog --no-defaults --start-datetime='2018-09-04 16:44:32' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p


    基于位置点

    at 565 上一次正确执行位置 --stop-position
    at 667 下一次正确执行位置 --start-position

    mysqlbinlog --no-defaults --base64-output=decode-rows -v mysql-bin.000002 #查看000002日志

    mysqlbinlog --no-defaults --stop-position='565' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p
    mysqlbinlog --no-defaults --start-position='667' /usr/local/mysql/data/mysql-bin.000002 | mysql -uroot -p

    您可能感兴趣的文章:
    • mysql8.0.20配合binlog2sql的配置和简单备份恢复的步骤详解
    • 浅析MySQL 备份与恢复
    • 详解mysql的备份与恢复
    • MySQL数据库备份恢复实现代码
    • mysql数据备份与恢复实现方法分析
    • mysql全量备份和快速恢复的方法整理
    • shell脚本实现mysql定时备份、删除、恢复功能
    • 从MySQL全库备份中恢复某个库和某张表的方法
    • MySQL使用全库备份数据恢复单表数据的方法
    • C#实现MySQL命令行备份和恢复
    • MySQL备份恢复设计思路
    上一篇:在golang中操作mysql数据库的实现代码
    下一篇:MySQL分页Limit的优化过程实战
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    mysql增量备份及断点恢复脚本实例 mysql,增量,备份,及,断点,