共计 2226 个字符,预计需要花费 6 分钟才能阅读完成。
丸趣 TV 小编给大家分享一下 binlog2sql 如何实现 MySQL 误操作的恢复,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
对于 MySQL 数据库中的误操作删除数据的恢复问题,可以使用基于 MySQL 中 binlog 做到类似于闪回或者生成反向操作的 SQL 语句来实现,是 MySQL 中一个非常实用的功能。
原理不难理解,基于 MySQL 的 row 格式的 binlog 中,记录历史的增删改 SQL 信息,基于此解析出来对应的 SQL 语句(回滚的话就是反向的 SQL 语句)。
在格式为 binlog 格式为 row 的日志模式下,binlog 中的内容记录了数据库中曾经执行的增删改信息,都是包含了反向信息的比如执行 delete from table where pk_id = 1; 按照主键来删除一条记录
对应的 binlog 中的 sql 语句为:
delete from table where pk_id = 1 and name = lsquo;xxx rsquo; and other_column = lsquo;xxx rsquo;;
where 条件不仅仅是原始语句的 Id,而且还包括中这一行所有的字段的信息的 update 操作也同理,不但记录了 update 操作,同时记录了 update 记录在更新之前的每一个字段的值。这样就可以利用这个日志来生成反向操作信息。
如下是利用 mysqlbinlog 工具解析出来的一个 MySQL 中典型的 binlog 日志文件的部分内容,可以清楚地看到执行过的 sql 语句的信息。
说到这里,对于 MySQL 中基于 binlog 的一些应用,比如复制或者数据库还原,其实就是重复执行某个数据库上的历史执行过的增删改 SQL 语句来实现的。
题外话:MySQL 的 binlog 作用记录事务语句的作用上,基本上等同于 SQLServer 的的事务日志。但是 SQL Server 的事务日志正的二进制内容的,微软官方也没有提供解析的方法,而 MySQL 中完全可以通过 mysqlbinlog 来解析出来这个日志中的内容。
如下是通过 MySQL 自带的 mysqlbinlog 工具解析出来的 binlog 日志文件中的信息,可以看到其中的 SQL 语句信息。
知道了 binlog 中的内容,就可以基于这个 binlog 来实现各种实用的功能,典型的就是误删数据的还原操作,比如苏家小萝卜同学就自己用 Python 搞定这个解析功能。
类似功能比较知名的还有大众点评网 DBA 自己写的 binlog2sql 工具,也是久闻大名,终于有机会尝试了。
binlog2sql 需要语句 pip 安装,所以需要先安装 pip
pip 安装参考:
https://www.cnblogs.com/technologylife/p/5870576.html
binlog2sql 下载以及安装:
https://github.com/danfengcao/binlog2sql
完成了 binlog2sql 之后,就可以使用它来实现数据的还原操作了,如下模拟一个误操作的恢复
在开启了 binlog,日志格式为 row 的测试数据下,对于测试表 test_01,分别执行以下 sql 语句:
insert into test_01 values (1, aaa insert into test_01 values (2, bbb insert into test_01 values (3, vvv -- 以下误操作,更新了全部数据 update test_01 set name = xxx
通过 show master logs; 找到当前的 binlog 文件,对应的 sql 语句的执行就存储在当前这个 binlog 中,binlog2sql 的目标就是这个文件
参考下图,可以发现
执行:python binlog2sql.py -h227.0.0.1 -P3306 -uroot -p rsquo;root rsquo; -ddb01 -t test_01 ndash;start-file= rsquo;binlog.000021 prime;(更多参数以及使用方式参考下文链接),通过 binlog2sql 来解析当前的 binlog 文件,解析出来的 SQL 语句就是正常 SQL 语句的执行(insert insert insert update(3 行记录))
执行:python binlog2sql.py -h227.0.0.1 -P3306 -uroot -p rsquo;root rsquo; -ddb01 -t test_01 ndash;start-file= rsquo;binlog.000021 prime; -B,通过 - B 参数生成反向的操作信息
加参数 - B 解析出来的 SQL 语句与上面的 SQL 语句刚好相反,包括顺序,也即以倒序的方式生成反向的操作
原始操作是 insert insert insert update update update,反向的操作就是 upfate update update delete delete delete,这样一来,可以根据具体的情况,截取生成的反向的 sql 语句,进行误操作的还原。
以上操作注意安装的 binlog2sql 的路径问题,如果路径不对,找不到 binlog2sql.py,上述命令也就无法执行
以上是“binlog2sql 如何实现 MySQL 误操作的恢复”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!