Mysql 通过binlog日志恢复数据的实现示例

 更新时间:2026年03月24日 10:34:10   作者:伐尘  
本文主要介绍了Mysql 通过binlog日志恢复数据的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Binlog日志,即binary log,是二进制日志文件,有两个作用,一个是增量备份,另一个是主从复制,即主节点维护一个binlog日志文件,从节点从binlog中同步数据,也可以通过binlog日志来恢复数据

登录mysql查看binlog日志的状态,输入show variables like ‘%log_bin%’;查看binlog为off关闭状态

开启mysql binlog日志,进入mysql配置文件(vi /etc/my.cnf) 在mysqld区域内添加如下内容,

①server-id = 1(单个节点id)
②log-bin= /var/lib/mysql/mysql-bin(位置一般和mysql库文件所在位置一样)
③expire_logs_days = 10(表示此日志保存时间为10天),重启mysqld,再次查看binlog日志开启状态为ON

Binlog日志包括两类文件

  • 第一个是二进制索引文件(后缀名为.index),
  • 第二个为日志文件(后缀名为.00000*),记录数据库所有的DDL和DML(除了查询语句select)语句事件

查看所有binlog日志文件列表:show master logs;

查看最后一个binlog日志的编号名称及其最后一个操作事件pos结束点的值:show master status;

Flush logs 刷新日志,此刻开始产生一个新编号的binlog文件,例如:

每当mysqld服务重启时,会自动执行刷新binlog日志命令,mysqldump备份数据时加-F选项也会刷新binlog日志

清空所有binlog日志命令:reset master;

查看binlog文件内容,使用查看工具mysqlbinlog来查看(cat/vi/more都是无法打开的)

上面的方法读取内容较多不易观察,以下命令更为方便查看命令:show binlog events in ‘mysql-bin.000003’;

指定查询,从pos点406开始查询,如下:

指定查询,从pos点154开始查询,中间跳过2行,查询4条数据,如图:

利用binlog日志恢复mysql数据,例如,现有一张数据表如图:此表位于hello数据库

现在将此数据库备份到本地(模拟每周的备份情况),备份命令如下

可以在数据备份之前或者之后执行flush logs重新生成一个binlog日志用来记录备份之后的所有增删改操作(重新生成日志更好找pos点),由于业务需求,现在对表进行插入

数据,修改数据,如图新增了两条数据id 为5和6,修改后数据如图,

6的年龄修改成了30

由于操作失误,误删除了数据库,所有数据都不见了,此时可以通过binlog日志恢复数据,由于之前有做了数据库备份,所以可以先将备份的数据导入进去,剩下缺少的就是备份之后操作所产生的内容(备份之后执行了插入内容以及更改内容),先恢复备份的数据:创建库hello并选择库(use hello),通过命令source /root/hello.sql将数据库内容导入,然后执行

恢复的内容如下所示:

上面恢复的数据只是截止到备份时间的数据,剩下缺少的数据可以通过binlog日志来恢复,由于我们备份数据库之前重新创建了mysql-bin.000006日志,所以备份后的所有操作都保存在这个日志中,可以先备份下这个日志文件,cp mysql-bin.000006 /root/ 接着执行flush logs 刷新日志,重新创建了一个binlog日志7

重新创建一个日志7的目的:接下来所有操作的数据都会写入到日志7中,日志6中不会在写入任何数据(方便根据日志6的内容恢复数据,因为日志6的数据就是备份之后到删库之前的所有操作日志,重建日志7不会有过多的数据影响恢复)

登录mysql 查看日志6: show binlog events in ‘mysql-bin.000006’;结果如下:

查看日志发现,在备份数据后首先执行的是插入数据操作(在一个事务内),此时可以通过指定pos结束点恢复(部分恢复),如图,pos结束点位435(事务已提交表示结束),执行命令如下,

/usr/bin/mysqlbinlog  --stop-position=435 --database=hello  /var/lib/mysql/mysql-bin.000006 | /usr/bin/mysql -uroot -p密码 -v hello (其中整个命令的含义是通过mysqlbinlog读取日志内容并通过管道传给mysql命令,-v表示执行此mysql命令)

执行后查询表发现如下:

备份之后插入的数据都出现了,目前还差一次修改的数据没有找回来,接着看日志6如图,

发现执行更新操作的事务区间为573到718,所以可以执行以下命令来恢复这段数据,

/usr/bin/mysqlbinlog  --start-position=573 --stop-position=718 --database=hello  /var/lib/mysql/mysql-bin.000006 | /usr/bin/mysql -uroot -p密码 -v hello注意其中的符号都是英文状态下(只恢复这段事务区间的数据也就是更新的数据)

恢复结果如下:

更改的数据回来了,也可以最开始的时候直接通过最终的pos结束点718来恢复

还有一种通过时间来恢复,还是先备份当前数据库(备份之前先flush logs创建一个新的binlog日志文件9),然后修改数据插入数据后如图,

修改后将当前数据库删除,(删除库之后再执行一下flush logs创建一个新的日志文件,这样新的操作都写入到这个文件中,上个日志文件只用来恢复数据,不会有其余数据混入)现在我们通过时间点来恢复从备份数据后到删除数据库这期间所有操作的数据,首先通过mysqlbinlog来了查看日志文件9如图所示,

执行命令:

/usr/bin/mysqlbinlog --start-datetime="2018-04-27 20:57:55" --stop-datetime="2018-04-27 20:58:18" --database=hello /var/lib/mysql/mysql-bin.000009 | /usr/bin/mysql -uroot -p8856769abcd -v hello

更改的数据得到了恢复

执行命令

/usr/bin/mysqlbinlog --start-datetime="2018-04-27 20:58:18" --stop-datetime="2018-04-27 20:58:35" --database=hello /var/lib/mysql/mysql-bin.000009 | /usr/bin/mysql -uroot -p8856769abcd -v hello

插入的数据得到了恢复,如图,

到此这篇关于Mysql 通过binlog日志恢复数据的实现示例的文章就介绍到这了,更多相关Mysql binlog日志恢复内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mac下忘记mysql密码重新设置密码的图文教程

    Mac下忘记mysql密码重新设置密码的图文教程

    这篇文章主要介绍了Mac下忘记mysql密码重新设置密码的教程,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-12-12
  • Mysql纵表转换为横表的方法及优化教程

    Mysql纵表转换为横表的方法及优化教程

    在应用中为了从不同的视图去分析数据,会使用不同的方案去查询数据库,横表和纵表的相互转换就是其中一个常见的情景,这篇文章主要给大家介绍了关于Mysql纵表转换为横表的相关资料,需要的朋友可以参考下
    2021-08-08
  • mysql 8.0.19 安装配置方法图文教程

    mysql 8.0.19 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.19 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-02-02
  • 一些mysql启动参数的说明和优化方法

    一些mysql启动参数的说明和优化方法

    要求MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。
    2011-04-04
  • Centos下Mysql安装图文教程

    Centos下Mysql安装图文教程

    这篇文章主要为大家详细介绍了 Centos下Mysql安装图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-10-10
  • PHP mysqli 增强 批量执行sql 语句的实现代码

    PHP mysqli 增强 批量执行sql 语句的实现代码

    本篇文章介绍了,在PHP中 mysqli 增强 批量执行sql 语句的实现代码。需要的朋友参考下
    2013-05-05
  • mysql 5.7.25 压缩版安装配置方法图文教程

    mysql 5.7.25 压缩版安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 5.7.25 压缩版安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-10-10
  • MySql超长自动截断实例详解

    MySql超长自动截断实例详解

    这篇文章主要介绍了MySql超长自动截断实例详解的相关资料,这里通过实例来说明如何实现自动截断的功能,需要的朋友可以参考下
    2017-07-07
  • 通过缓存+SQL修改优雅地优化慢查询

    通过缓存+SQL修改优雅地优化慢查询

    本文通过介绍缓存的基本原理和SQL语句的优化手段,以及实际案例的分析,为读者提供了一种简单而有效的优化思路。读者可以通过本文了解到如何在不修改程序代码的情况下,通过巧妙地运用缓存和SQL优化技巧,提高程序的性能和响应速度。
    2023-04-04
  • MySQL数据库之表的约束图文详解

    MySQL数据库之表的约束图文详解

    在数据库设计中,表约束是保证数据完整性、一致性的重要手段,数据类型本身就是一种基本约束,限制了数据的范围和格式,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-09-09

最新评论