当前位置:   article > 正文

利用binlog2sql进行闪回_binlog2sql 闪回

binlog2sql 闪回

binlog2sql简介

binlog2sql是大众点评开源的一个 MySQL 闪回工具。可以实现数据的回滚。

闪回原理简析

开始之前,先说说闪回。我们都知道 MySQL binlog 以 event 为单位,记录数据库的变更信息,这些信息能够帮助我们重现这之间的所有变化,也就是所谓的闪回。

binlog 有三种可选的格式:

  1. statement:基于 SQL 语句的模式,binlog 数据量小,但是某些语句和函数在复制过程可能导致数据不一致甚至出错;
  2. mixed:混合模式,根据语句来选用是 statement 还是 row 模式;
  3. row:基于行的模式,记录的是行的完整变化。安全,但 binlog 会比其他两种模式大很多;

利用 binlog 做闪回,需要将 binlog 格式设置为 row,因为我们需要最详尽的信息来确定操作之后数据不会出错。

既然 binlog 以 event 形式记录了所有的变更信息,那么我们把需要回滚的 event,从后往前回滚回去即可。

回滚操作:

  1. 对于 delete 操作,我们从 binlog 提取出 delete 信息,反向生成 insert 回滚语句;
  2. 对于 insert 操作,反向生成 delete 回滚语句;
  3. 对于 update 操作,根据信息生成反向的 update 语句;

binlog2sql的安装 

  1. git clone https://github.com/danfengcao/binlog2sql.git
  2. cd binlog2sql
  3. pip install -r requirements.txt

binlog2sql的使用

  1. MySQL server必须设置以下参数:
  2. [mysqld]
  3. server_id = 1
  4. log_bin =mysql-bin.log
  5. max_binlog_size = 1G
  6. binlog_format = row
  7. binlog_row_image = full

案例:先删除mysql库下test表的数据,然后通过回滚还原。

 

需要创建一个闪回用户,该用户的最小权限如下:

  1. GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO
  2. #select:需要读取server端information_schema.COLUMNS表,获取表结构的元信息,拼接成可视化的sql语句
  3. #replication client:两个权限都可以,需要执行'SHOW MASTER STATUS', 获取server端的binlog列表
  4. #replication slave:通过BINLOG_DUMP协议获取binlog内容的权限

然后就可以恢复了,首先确认使用的哪一个binlog文件 

show master status;

 

解析标准sql

python binlog2sql.py -P3306 -utest -p123456 -dmysql -ttest --start-file='mysql-bin.000002'

 

解析回滚sql

python binlog2sql.py -P3306 -utest -p123456 -dmysql -ttest --start-file='mysql-bin.000002' --start-position=4 --stop-position=433 -B > test_rollback.sql

 

 

最后应用回滚sql,完成恢复。

mysql>source /usr/local/bin/binlog2sql/binlog2sql/test_rollback.sql

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/IT小白/article/detail/955242
推荐阅读
相关标签
  

闽ICP备14008679号