专栏首页陶士涵的菜地[MySQL]mysql binlog回滚数据

[MySQL]mysql binlog回滚数据

1.先开启binlog

log-bin = /var/log/mysql/mysql_bin #binlog日志文件,以mysql_bin开头,六个数字结尾的文件:mysql_bin.000001,并且会将文件存储在相应的xxx/xxx路径下,如果只配置mysql_bin的话默认在C:\ProgramData\MySQL\MySQL Server 5.7\Data下; binlog_format = ROW #binlog日志格式,默认为STATEMENT:每一条SQL语句都会被记录;ROW:仅记录哪条数据被修改并且修改成什么样子,是binlog开启并且能恢复数据的关键; expire_logs_days= 10 #binlog过期清理时间; max_binlog_size = 100m #binlog每个日志文件大小; binlog_cache_size = 4m #binlog缓存大小; max_binlog_cache_size = 512m #最大binlog缓存大小。 service mysql restart #重启一下

2.安装binlog2sql的python代码 https://github.com/danfengcao/binlog2sql

apt-get install python-pip git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql cd binlog2sql pip install -r requirements.txt

3.测试在一张表里删除了数据和更新了数据以后,看看日志目录里binlog的日志生成情况,例如:

4.进入mysql查看一下开始和结束的pos位置,第一个框是删除,下面的是更新,开始位置和结束位置219--498 563---881

show binlog events in 'mysql-bin.000352'

5.用binlog2sql打印出sql语句和逆向回滚的sql语句,保存并导入

python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p'xxxx' --start-file mysql-bin.000352 --flashback

两条sql就可以重新执行一下了

UPDATE `my_test`.`user` SET `UPDATETIME`='2019-04-08 10:57:06', `level`=1, `UPDATETIME1`='2019-04-08 10:57:06', `extend_id`=109999, `path`='0/1/', `id`=0 WHERE `UPDATETIME`='2020-02-10 18:11:09' AND `level`=1 AND `UPDATETIME1`='2020-02-10 18:11:09' AND `extend_id`=109999 AND `path`='0/1/' AND `id`=2 LIMIT 1; #start 498 end 797 time 2020-02-10 18:11:09 INSERT INTO `my_test`.`user`(`UPDATETIME`, `level`, `UPDATETIME1`, `extend_id`, `path`, `id`) VALUES ('2019-04-08 10:57:06', 4, '2019-04-08 10:57:06', 109999, '0/1/2/4/6/', 0); #start 4 end 422 time 2020-02-10 17:40:14

增加开始和结束位置

python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p'XXX' --start-file mysql-bin.000352 --flashback --start-pos 219 --end-pos 498

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [C语言] 数据结构-算法效率的度量方法-事前分析估算方法

    事前分析估算方法:在计算机程序编制前,依据统计方法对算法进行估算,抛开与计算机硬件软件有关的因素,一个程序的运行时间,依赖于算法的,好坏和问题的输入规模,所谓问...

    陶士涵
  • [android] 采用httpclient提交数据到服务器

    开源框架httpclient,android直接内置到了android.jar包中,对浏览器的简单包装

    陶士涵
  • [android] 测试的相关概念

    /********************2016年5月4日 更新********************************/

    陶士涵
  • Go Modules 终极入门

    Go modules 是 Go 语言中正式官宣的项目依赖解决方案,Go modules(前身为vgo)于 Go1.11 正式发布,在 Go1.14 已经准备好,...

    madneal
  • html canvas绘制视频

    sofu456
  • 深度总结 | 知识蒸馏在推荐系统中的应用

    链接 | https://zhuanlan.zhihu.com/p/143155437

    张小磊
  • mybatis datasource的工厂方法模式(深度好文)

    工厂方法模式是使用抽象工厂(抽象类或接口)来生产抽象产品(抽象类或接口)的一个过程,由抽象工厂来决定抽象产品的生产过程,实际生产中由具体的工厂子类或者实现类来完...

    算法之名
  • MySQL 【教程三】

    MySQL 事务主要用于处理操作量大,复杂度高的数据。比如说,在人员管理系统中,你删除一个人员,你既需要删除人员的基本资料,也要删除和该人员相关的信息,如信箱,...

    IT茂茂
  • 获取后台任务进度的另类办法

    jeremyxu
  • 520试了大佬的表白神器,被女友无情拉黑,最后靠这个必杀技,真香!

    点份炸鸡和奶茶,虽然外卖要天亮以后才能送,我氪金也还是过不去那一关。罢了,乐于助人、乐善好施、雪中送炭的场主,怎么会计较这些?分享一波硬技能,素材来源于网络,取...

    养码场

扫码关注云+社区

领取腾讯云代金券