mysql 误删除数据-数据回滚
发表于:2025-01-22 作者:千家信息网编辑
千家信息网最后更新 2025年01月22日,mysql 误删除本次使用的原美团开源Mysql 数据闪回工具传送门:https://github.com/Meituan-Dianping/MyFlash一,简介MyFlash的前身是binlong
千家信息网最后更新 2025年01月22日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 wrapper
2)模拟数据
我这里把测试库的一些数据拿啦,直接导入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安全错误
数据库的锁怎样保障安全
广州网络技术有限公司简介
青岛系统软件开发哪家好
数据库表单控件设计
今日头条看广告服务器异常
社保卡显示应用服务器
最便宜的国产数据库
盈世邮箱服务器
vb查询数据库表
服务器攻击端口
网络安全与保密培训会
b2b2c商城数据库结构
软件开发学校培训机构
fifa e数据库
js怎么检查数据库图片是否存在
网络安全比自由重要辩论
重庆电大软件开发学院电话
成县网络安全宣传周
软件开发专业学生实习学校意见
吃鸡官方服务器过载
开创网络安全工作新闻
广州能耗管理软件开发怎么收费
python启用数据库
服务器内存批次
蓬莱ios软件开发外包公司
吉林软件开发诚信服务
什么叫无线传感网络技术
影像传输服务器是什么原因
网络服务器系统集成怎么自学
服务器防ddos是什么意思
dat数据库打开工具