MySQL数据库误操作后快速回滚的方法
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,binlog2sql快速回滚开源工具binlog2sql:首先,确认你的MySQL server开启了binlog,设置了以下参数:(binlog + row模式)[mysqld] server-id
千家信息网最后更新 2026年11月02日MySQL数据库误操作后快速回滚的方法
binlog2sql快速回滚
开源工具binlog2sql:
首先,确认你的MySQL server开启了binlog,设置了以下参数:(binlog + row模式)
[mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log max_binlog_size = 1000M binlog-format = row
如果没有开启binlog,也没有预先生成回滚SQL,那真的无法快速回滚了。对存放重要业务数据的MySQL,强烈建议开启binlog。
随后,安装开源工具binlog2sql。binlog2sql是一款简单易用的binlog解析工具,其中一个功能就是生成回滚SQL。
git clone https://github.com/danfengcao/binlog2sql.git pip install -r requirements.txt
回滚步骤:
登录mysql,查看目前的binlog文件
mysql> show master logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 12262268 | | mysql-bin.000002 | 132776 | +------------------+-----------+
最新的binlog文件是mysql-bin.000002,我们再定位误操作SQL的binlog位置
$ python binlog2sql/binlog2sql.py -h227.0.0.1 -P3306 -uadmin -p'admin' -dtest -t f --start-file='mysql-bin.000002'
输出:
DELETE FROM `test`.`f` WHERE `did`=18 AND `updateTime`='2016-12-06 12:28:18' AND `uid`=1 LIMIT 1; #start 4 end 314 DELETE FROM `test`.`f` WHERE `did`=19 AND `updateTime`='2016-12-06 12:55:56' AND `uid`=2 LIMIT 1; #start 4 end 314 DELETE FROM `test`.`f` WHERE `did`=20 AND `updateTime`='2016-12-07 14:00:58' AND `uid`=3 LIMIT 1; #start 4 end 314 DELETE FROM `test`.`f` WHERE `did`=21 AND `updateTime`='2016-12-07 14:01:00' AND `uid`=4 LIMIT 1; #start 4 end 314
生成回滚sql,并检查回滚sql是否正确
$ python binlog2sql/binlog2sql.py -h227.0.0.1 -P3306 -uadmin -p'admin' -dtest -t f --start-file='mysql-bin.000002' --start-pos=4 --end-pos=314 -B 输出:
INSERT INTO `test`.`f`(`did`, `updateTime`, `uid`) VALUES (21, '2016-12-07 14:01:00', 4); #start 4 end 314 INSERT INTO `test`.`f`(`did`, `updateTime`, `uid`) VALUES (20, '2016-12-07 14:00:58', 3); #start 4 end 314 INSERT INTO `test`.`f`(`did`, `updateTime`, `uid`) VALUES (19, '2016-12-06 12:55:56', 2); #start 4 end 314 INSERT INTO `test`.`f`(`did`, `updateTime`, `uid`) VALUES (18, '2016-12-06 12:28:18', 1); #start 4 end 314
确认回滚sql正确,执行回滚语句。登录mysql,数据回滚成功。
$ python binlog2sql.py -h227.0.0.1 -P3306 -uadmin -p'admin' -dtest -t f --start-file='mysql-bin.000002' --start-pos=4 --end-pos=314 -B | mysql -h227.0.0.1 -P3306 -uadmin -p'admin' mysql> select * from f; +-----+-----+---------------------+ | uid | did | updateTime | +-----+-----+---------------------+ | 1 | 18 | 2016-12-06 12:28:18 | | 2 | 19 | 2016-12-06 12:55:56 | | 3 | 20 | 2016-12-07 14:00:58 | | 4 | 21 | 2016-12-07 14:01:00 | +-----+-----+---------------------+
常见问题
1.有人会问,我DDL误操作了怎么快速回滚?比如drop了一张大表。
很难做到,因为即使在在row模式下,DDL操作也不会把每行数据的变化记录到binlog,所以DDL无法通过binlog回滚。实现DDL回滚,必须要在执行DDL前先备份老数据。确实有人通过修改mysql server源码实现了DDL的快速回滚,我找到阿里的xiaobin lin提交了一个patch。但据我所知,国内很少有互联网公司应用了这个特性。原因的话,我认为最主要还是懒的去折腾,没必要搞这个低频功能,次要原因是会增加一些额外存储。
2.mysql除了binlog2sql,是否还有其他回滚工具?
当然有。阿里彭立勋对mysqlbinlog增加了flashback的特性,这应该是mysql最早有的flashback功能,彭解决的是DML的回滚,并说明了利用binlog进行DML闪回的设计思路。DDL回滚特性也是由阿里团队提出并实现的。这两个功能是有创新精神的,此后出现的闪回工具基本都是对上面两者的模仿。另外,去哪儿开源的Inception是一套MySQL自动化运维工具,这个就比较重了,支持DML回滚,还不是从binlog回滚的,是从备份回滚的,也支持DDL回滚表结构,数据是回滚不了滴~
摘自:
http://www.jb51.net/article/99553.htm
binlog2sql快速回滚
开源工具binlog2sql:
首先,确认你的MySQL server开启了binlog,设置了以下参数:(binlog + row模式)
[mysqld] server-id = 1 log_bin = /var/log/mysql/mysql-bin.log max_binlog_size = 1000M binlog-format = row
如果没有开启binlog,也没有预先生成回滚SQL,那真的无法快速回滚了。对存放重要业务数据的MySQL,强烈建议开启binlog。
随后,安装开源工具binlog2sql。binlog2sql是一款简单易用的binlog解析工具,其中一个功能就是生成回滚SQL。
git clone https://github.com/danfengcao/binlog2sql.git pip install -r requirements.txt
回滚步骤:
登录mysql,查看目前的binlog文件
mysql> show master logs; +------------------+-----------+ | Log_name | File_size | +------------------+-----------+ | mysql-bin.000001 | 12262268 | | mysql-bin.000002 | 132776 | +------------------+-----------+
最新的binlog文件是mysql-bin.000002,我们再定位误操作SQL的binlog位置
$ python binlog2sql/binlog2sql.py -h227.0.0.1 -P3306 -uadmin -p'admin' -dtest -t f --start-file='mysql-bin.000002'
输出:
DELETE FROM `test`.`f` WHERE `did`=18 AND `updateTime`='2016-12-06 12:28:18' AND `uid`=1 LIMIT 1; #start 4 end 314 DELETE FROM `test`.`f` WHERE `did`=19 AND `updateTime`='2016-12-06 12:55:56' AND `uid`=2 LIMIT 1; #start 4 end 314 DELETE FROM `test`.`f` WHERE `did`=20 AND `updateTime`='2016-12-07 14:00:58' AND `uid`=3 LIMIT 1; #start 4 end 314 DELETE FROM `test`.`f` WHERE `did`=21 AND `updateTime`='2016-12-07 14:01:00' AND `uid`=4 LIMIT 1; #start 4 end 314
生成回滚sql,并检查回滚sql是否正确
$ python binlog2sql/binlog2sql.py -h227.0.0.1 -P3306 -uadmin -p'admin' -dtest -t f --start-file='mysql-bin.000002' --start-pos=4 --end-pos=314 -B 输出:
INSERT INTO `test`.`f`(`did`, `updateTime`, `uid`) VALUES (21, '2016-12-07 14:01:00', 4); #start 4 end 314 INSERT INTO `test`.`f`(`did`, `updateTime`, `uid`) VALUES (20, '2016-12-07 14:00:58', 3); #start 4 end 314 INSERT INTO `test`.`f`(`did`, `updateTime`, `uid`) VALUES (19, '2016-12-06 12:55:56', 2); #start 4 end 314 INSERT INTO `test`.`f`(`did`, `updateTime`, `uid`) VALUES (18, '2016-12-06 12:28:18', 1); #start 4 end 314
确认回滚sql正确,执行回滚语句。登录mysql,数据回滚成功。
$ python binlog2sql.py -h227.0.0.1 -P3306 -uadmin -p'admin' -dtest -t f --start-file='mysql-bin.000002' --start-pos=4 --end-pos=314 -B | mysql -h227.0.0.1 -P3306 -uadmin -p'admin' mysql> select * from f; +-----+-----+---------------------+ | uid | did | updateTime | +-----+-----+---------------------+ | 1 | 18 | 2016-12-06 12:28:18 | | 2 | 19 | 2016-12-06 12:55:56 | | 3 | 20 | 2016-12-07 14:00:58 | | 4 | 21 | 2016-12-07 14:01:00 | +-----+-----+---------------------+
常见问题
1.有人会问,我DDL误操作了怎么快速回滚?比如drop了一张大表。
很难做到,因为即使在在row模式下,DDL操作也不会把每行数据的变化记录到binlog,所以DDL无法通过binlog回滚。实现DDL回滚,必须要在执行DDL前先备份老数据。确实有人通过修改mysql server源码实现了DDL的快速回滚,我找到阿里的xiaobin lin提交了一个patch。但据我所知,国内很少有互联网公司应用了这个特性。原因的话,我认为最主要还是懒的去折腾,没必要搞这个低频功能,次要原因是会增加一些额外存储。
2.mysql除了binlog2sql,是否还有其他回滚工具?
当然有。阿里彭立勋对mysqlbinlog增加了flashback的特性,这应该是mysql最早有的flashback功能,彭解决的是DML的回滚,并说明了利用binlog进行DML闪回的设计思路。DDL回滚特性也是由阿里团队提出并实现的。这两个功能是有创新精神的,此后出现的闪回工具基本都是对上面两者的模仿。另外,去哪儿开源的Inception是一套MySQL自动化运维工具,这个就比较重了,支持DML回滚,还不是从binlog回滚的,是从备份回滚的,也支持DDL回滚表结构,数据是回滚不了滴~
摘自:
http://www.jb51.net/article/99553.htm
工具
数据
功能
特性
阿里
生成
原因
备份
文件
模式
支持
登录
输出
重要
必要
成功
业务
两个
互联网
位置
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网金融科技
百单网互联网科技有限公司
南京欣网互联网络科技有限公司
互联网科技工作委员会毛军
科技互联网公司装修
西安互联网科技
北京互联网络科技有限公司
互联网 视角下的科技创新
互联网金融 科技创新
互联网科技宣传片
上海亿帐通互联网科技
须眉科技是互联网公司吗
互联网和黑科技的看法
河南猎农互联网科技有限公司
徐州市互联网科技有限公司
区块链结合互联网科技
美国五大互联网科技公司市值多少
互联网科技对化妆品行业
河南商务圈互联网科技有限公司
互联网科技企业文化
互联网科技企业
广州为想互联网科技有限公司
高科技互联网
互联网科技巨头监管
科技股互联网
贷财互联网科技
互联网5g黑科技有哪些
深圳艾果互联网通讯科技
杭州披云加互联网科技有限公司
如何强化互联网金融科技