[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)

相关推荐

  • mysql进阶学习二之搭建主从

    前面说了主从复制的原理,现在我们搭建主从结构 1. 提前准备 我准备了两台主机,主节点是远程的centos7,从节点是本机windows 主从复制的原理在上一篇已经说了:主节点中mysql创建一个用户 ...

  • 内部群炸了锅,隔壁同事真删库了啊。。

    事件起因 我们的系统中有数据导入的功能,可以把特定的格式的 excel 数据导入到系统中来. 由于客户电脑的文件比较多,很多文件的名字也比较相近,客户在导入 excel 时选错了文件. 这个错误的 e ...

  • MySQL binlog日志操作详解

    MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的. bi ...

  • Mysql 死锁引发的@Transactional 数据回滚

    Spring框架中我们经常使用 @Transactional 注解来做事务,但是事务并不能保证有效性: 以下是我遇到的问题,不一定完全正确,可以做个参考: 在一个类上标记了 @Transactiona ...

  • 为什么Mysql需要binlog、redo log和undo log三种日志

    日志是 mysql 数据库的重要组成部分,记录着数据库运行期间各种状态信息.mysql日志主要包括错误日志.查询日志.慢查询日志.事务日志.二进制日志几大类. 作为开发,我们重点需要关注的是二进制日志 ...

  • 【竺】数据库笔记15——MySQL创建数据库并插入数据(二)

    一.操作简介 1.1 操作内容 本次将介绍 MySQL 新建数据库,新建表,插入数据以及基本数据类型的相关知识. 本节实验将创建一个名为 mysql_shiyan 的数据库,其中有两张表 employ ...

  • mysql数据库binlog日志的异地备份

    MySQL数据库的二进制日志binlog记录了对数据库的全量DDL和DML操作,对数据库的point to point灾难恢复起着无法替代的关键作用.因此,基于此类考虑,需要对生产环境产生的binlo ...

  • MySQL数据库插入100w条数据要花多久?

    后端实验室 241篇原创内容 公众号 1.多线程插入(单表) 2.多线程插入(多表) 3.预处理SQL 4.多值插入SQL 5.事务(N条提交一次) 多线程插入(单表) 问:为何对同一个表的插入多线程 ...

  • ABP框架使用Mysql数据库,以及基于SQLServer创建Mysql数据库的架构和数据

    ABP默认的数据库是SQLServer,不过ABP框架底层是EF框架,因此也是很容易支持其他类型的数据库的,本篇随笔介绍在ABP框架使用Mysql数据库,以及基于SQLServer创建MySql数据库 ...

  • MySQL学习——查询表里的数据

    MySQL学习--查询表里的数据 摘要:本文主要学习了使用DQL语句查询表里数据的方法. 数据查询 语法 1 select [distinct] 列1 [as '别名1'], ..., 列n [as ...

  • 支付宝的慧定投好用吗?回测数据供参考

    关  注  公  众 号:小鱼量化 公号ID:xiaoyulianghua 最近公众号上的几个网友留言问支付宝的慧定投怎么样?"慧定投"实际上能够实现涨多了少买,跌多了多买,实现定 ...

  • Mac“终端”上如何限制回滚行数?

    "终端"会保留日志,允许您回滚到用户键入的所有内容. 随着时间流逝,信息量会不断增加,使得回滚到内容的操作难以执行. 使用"终端"偏好设置,您可以更改保留在会话 ...