MySQL数据库误操作后快速回滚的方法
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,binlog2sql快速回滚开源工具binlog2sql:首先,确认你的MySQL server开启了binlog,设置了以下参数:(binlog + row模式)[mysqld] server-id
千家信息网最后更新 2025年01月20日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安全错误
数据库的锁怎样保障安全
湖北教育台网络安全讲座
网络技术的应用产品有哪些
GALE数据库技术学院
产业活动单位的数据库
网络安全jlpkx科普
组合拳数据库
软件开发项目经理的工资
福建通用软件开发收费
互穿网络技术
手机扫条码软件开发
育苗通无法连接服务器是什么意思
上海楼控管理软件开发哪家好
网络安全保证书大学生
华为服务器管理地址是多少
香港网页服务器
hp服务器硬盘灯不亮
非计算机专业能考数据库吗
炫酷网络技术股份有限公司
sql打开数据库的命令语句
软件开发什么
2021年网络安全知识宣传
公安网络安全开展情况
软件开发劳务费
江西网络安全大赛视频
计算机能处理的数据库
手机软件开发实习报告
数据库中sql语句数值型
修改华为服务器管理口密码
网络安全招聘简章
网络安全包抬哪些项目