mysql 误删除数据-数据回滚
发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,mysql 误删除本次使用的原美团开源Mysql 数据闪回工具传送门:https://github.com/Meituan-Dianping/MyFlash一,简介MyFlash的前身是binlong
千家信息网最后更新 2026年11月03日mysql 误删除数据-数据回滚
mysql 误删除
本次使用的原美团开源Mysql 数据闪回工具
传送门:https://github.com/Meituan-Dianping/MyFlash
一,简介
MyFlash的前身是binlong2,后续是由美团点评公司技术工程部开发维护的一个回滚DML操作的工具。该工具通过解析V4版本的二进制日志,完成回滚操作。相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易。 该工具已经在美团点评内部使用
二,限制
- 二进制日志格式必须为【row】行级模式 ,且binlog_row_image =full
- 仅支持5.6与5.7 (如果是低版本的mysql 二种方案 1,升级mysql 2,使用binlog2)
binlog2sql工具的下载地址: - 只能回滚DML(增,删,改)
三,详细说明
3.1 安装部署
git clone https://github.com/Meituan-Dianping/MyFlash.gitcd MyFlash/[root@gitlab MyFlash]# yum install glib2*[root@gitlab MyFlash]# gcc -w `pkg-config --cflags --libs glib-2.0` source/binlogParseGlib.c -o binary/flashback#动态编译
3.2 开启mysql-binlog
[root@gitlab mysql]# cat /etc/my.cnf|grep "log_bin*"# log_binlog-bin=mysql-bin #名字前缀log_bin=/var/lib/mysql/mysql-bin #路径log_bin_index=/var/lib/mysql/mysql-bin.index #索引binlog_format=row #binlog模式 (行、混合、sql语句)max_binlog_size = 512M #单个文件大小expire_logs_day = 30 #保留最近30天server-id = 1 #ID编号[root@gitlab mysql]# /etc/init.d/mysqld restartRestarting mysqld (via systemctl): [ OK ]登陆mysql 查看binlog开启情况mysql> show variables like '%log_bin%'
注意:此工具必须使用row 行级模式
show variables like 'binlog%'; ##行级模式缺点,binlog日志会增大 原来的3倍 优点:相对安全3.3 使用方法
cd binary./flashback --helpUsage: flashback [OPTION...]Help Options: -?, --help Show help optionsApplication Options: --databaseNames 指定需要回滚的数据库名。多个数据库可以用","隔开。如果不指定该参数,相当于指定了所有数据库。 --tableNames 指定需要回滚的表名。多个表可以用","隔开。如果不指定该参数,相当于指定了所有表。 --start-position 指定回滚开始的位置。如不指定,从文件的开始处回滚。请指定正确的有效的位置,否则无法回滚 --stop-position 指定回滚结束的位置。如不指定,回滚到文件结尾。请指定正确的有效的位置,否则无法回滚 --start-datetime 指定回滚的开始时间。注意格式必须是 "2016-11-17 14:40:00。 如不指定,则不限定时间 --stop-datetime 指定回滚的结束时间。注意格式必须是 %Y-%m-%d %H:%M:%S。 如不指定,则不限定时间 --sqlTypes 指定需要回滚的sql类型。目前支持的过滤类型是INSERT, UPDATE ,DELETE。多个类型可以用","隔开。 --maxSplitSize 一旦指定该参数,对文件进行固定尺寸的分割(单位为M),过滤条件有效,但不进行回滚操作。该参数主要用来将大的binlog文件切割,防止单次应用的binlog尺寸过大,对线上造成压力 --binlogFileNames 指定需要回滚的binlog文件,目前只支持单个文件,后续会增加多个文件支持 --outBinlogFileNameBase 指定输出的binlog文件前缀,如不指定,则默认为binlog_output_base.flashback --logLevel 仅供开发者使用,默认级别为error级别。在生产环境中不要修改这个级别,否则输出过多 --include-gtids 指定需要回滚的gtid,支持gtid的单个和范围两种形式。 --exclude-gtids 指定不需要回滚的gtid,用法同include-gtids(跳过)3.4 测试用例
1) 测试环境介绍:
[root@gitlab binary]# cat /etc/redhat-release #系统版本7.4CentOS Linux release 7.4.1708 (Core) [root@gitlab binary]# uname -a #系统内核3.10 64位Linux gitlab.example.com 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux[root@gitlab binary]# mysql -V #mysql 版本mysql Ver 14.14 Distrib 5.6.39, for Linux (x86_64) using EditLine wrapper2)模拟数据
我这里把测试库的一些数据拿啦,直接导入sql作为案例使用
SELECT * FROM `sys_member_msg` WHERE id <=666
3) 模拟误删除
delete from `sys_member_msg` where id<=666 #在查看id小于666的就显示空了
4)回滚指定文件中的所有【插入、删除、修改】语句
row行级模式 查看binlong,需要添加参数(--base64-output=decode-rows -v)对输出结果解码。
4.1 查看开启binlong
mysql> show variables like 'log_%'; +----------------------------------------+--------------------------------+| Variable_name | Value |+----------------------------------------+--------------------------------+| log_bin | ON || log_bin_basename | /var/lib/mysql/mysql_bin || log_bin_index | /var/lib/mysql/mysql-bin.index |13 rows in set (0.00 sec)4.2 查看最新binlog位置
mysql> show master status; #查看最新binlog位置+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql_bin.000007 | 16696881 | | | |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)4.3 生成回滚数据文件
[root@gitlab binary]# time ./flashback --sqlTypes='DELETE' --binlogFileNames=/var/lib/mysql/mysql_bin.000007real 0m0.053suser 0m0.015ssys 0m0.035s#参数意思 看上面用法介绍#比如:开始时间 -结束时间 --DML语句类型(增删改)、post点、大数据要拆分#默认产生一个binlog_output_base.flashback文件
4.4 恢复到数据库
[root@gitlab binary]# mysqlbinlog binlog_output_base.flashback |mysql -uroot -pEnter password: #输入mysql密码#没有反馈,应该OK了3.5查看数据回滚情况
SELECT * FROM `sys_member_msg` WHERE id <=666四 总结:
1,myflash 只支持 row 模式,如果你现在的binlog是其它模式,切换的时候,会影响主从同步
2,row模式很安全,但是binlog数据量会增加 3-5倍
3,查看row模式下的binlog 需要添加参数(--base64-output=decode-rows -v)对输出结果解码
4,必要给开发生产数据库开放权限,让他们select去吧
5,筛选恢复数据有很多比如:开始时间 -结束时间 --DML语句类型(增删改)、post点、大数据要拆分后逐去恢复 等等
最后希望所有运维的同志们,不在背锅,远离背锅。。。。

数据
文件
模式
时间
参数
工具
位置
支持
数据库
类型
多个
版本
语句
输出
有效
单个
日志
格式
级别
开发
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
互联网络科技
互联网科技名片
北京路客互联网科技有限公司
为想互联网科技怎么样
北京互联网科技
北京互联网络科技有限公司
互联网科技ppt模板
互联网科技论坛
大白互联网科技
中国互联网金融科技基金
茂名市互联网科技产业园
千方科技属于互联网企业吗
互联网与医疗科技
为客找房互联网科技公司怎么样
陕西云淼互联网科技公司
万物互联网智能科技
上海万顺科技互联网有限公司招聘
西安左小互联网科技有限公司
玉溪新华互联网科技怎么选
武汉亿视互联网科技有限公司
科技互联网公司logo
沃里互联网科技
欧洲十大科技互联网公司
互联网经济与金融科技
深圳市优智互联网科技有限公司
为客找房互联网科技公司怎么样
滨湖区互联网智能科技产品有哪些
互联网科技股为什么大涨
保山互联网科技靠谱吗
第三届互联网大会安防黑科技