使用binlog2sql工具闪回恢复被误删除的数据实战

1)插入测试数据

root@localhost:mytest1\]\>select \* from user; +----+--------+------------+ \| id \| name \| addtime \| +----+--------+------------+ \| 1 \| 小赵 \| 2013-11-11 \| \| 2 \| 小钱 \| 2014-11-11 \| \| 3 \| 小孙 \| 2016-11-11 \| \| 4 \| 小李 \| 2013-11-11 \| +----+--------+------------+ 4 rows in set (0.00 sec) **删除两行数据后:** mysql\> select \* from user; +----+--------+------------+ \| id \| name \| addtime \| +----+--------+------------+ \| 1 \| 小赵 \| 2013-11-11 \| \| 4 \| 小李 \| 2013-11-11 \| +----+--------+------------+ 2 rows in set (0.00 sec) **记录binlog的位置** \[root@localhost:mytest1\]\>show master status; +------------------+----------+--------------+------------------+--------------------------------------------------------------------------------------------------+ \| File \| Position \| Binlog_Do_DB \| Binlog_Ignore_DB \| Executed_Gtid_Set \| +------------------+----------+--------------+------------------+--------------------------------------------------------------------------------------------------+ \| mysql-bin.000026 \| 2463 \| **2)安装binlog2sql** **使用mysql用户解压binlog2sql.zip 到/home/mysql目录** unzip binlog2sql.zip cd binlog2sql **使用root安装binlog2sql.zip里自带的pymysql等三个包,否则会报ImportError: No module named pymysql等错误** \[root@t3-dtpoc-dtpoc-web04 binlog2sql\]# ls binlog2sql-master mysql-replication-0.13 PyMySQL-0.7.11 wheel-0.29.0 cd PyMySQL-0.7.11 python setup.py install cd mysql-replication-0.13 python setup.py install cd wheel-0.29.0 python setup.py install cd binlog2sql-master cd binlog2sql **3)使用root执行binlog2sql** **python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p'1234' -dmytest -tuser --start-file='mysql-bin.000026' --start-datetime='2023-09-18 14:00:00' --stop-datetime='2023-09-18 14:25:00'\> /tmp/raw.sql** 可以看到删除表user数据的sql vi /tmp/raw.sql USE mytest; CREATE TABLE \`user\` ( \`id\` int(11) NOT NULL AUTO_INCREMENT, \`name\` varchar(10) DEFAULT NULL, \`addtime\` date, PRIMARY KEY (\`id\`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8; INSERT INTO \`mytest\`.\`user\`(\`addtime\`, \`id\`, \`name\`) VALUES ('2013-11-11', 1, '小赵'); #start 9463 end 9721 time 2023-09-18 14:17:24 INSERT INTO \`mytest\`.\`user\`(\`addtime\`, \`id\`, \`name\`) VALUES ('2014-11-11', 2, '小钱'); #start 9817 end 10075 time 2023-09-18 14:18:04 INSERT INTO \`mytest\`.\`user\`(\`addtime\`, \`id\`, \`name\`) VALUES ('2016-11-11', 3, '小孙'); #start 10171 end 10429 time 2023-09-18 14:18:31 INSERT INTO \`mytest\`.\`user\`(\`addtime\`, \`id\`, \`name\`) VALUES ('2013-11-11', 4, '小李'); #start 10525 end 10783 time 2023-09-18 14:18:58 DELETE FROM \`mytest\`.\`user\` WHERE \`addtime\`='2014-11-11' AND \`id\`=2 AND \`name\`='小钱' LIMIT 1; #start 10879 end 11138 time 2023-09-18 14:19:38 DELETE FROM \`mytest\`.\`user\` WHERE \`addtime\`='2016-11-11' AND \`id\`=3 AND \`name\`='小孙' LIMIT 1; #start 10879 end 11138 time 2023-09-18 14:19:38 **4. )根据位置信息,我们确定了误操作sql来自同一个事务,准确位置在10879-11138之间(binlog2sql对于同一个事务会输出同样的start position)。再根据位置过滤,使用 _\*\*-B\*\*_ 选项生成回滚sql,检查回滚sql是否正确。(注:真实场景下,生成的回滚SQL经常会需要进一步筛选。结合grep、编辑器等)** DELETE FROM \`mytest\`.\`user\` WHERE \`addtime\`='2014-11-11' AND \`id\`=2 AND \`name\`='小钱' LIMIT 1; #start 10879 end 11138 time 2023-09-18 14:19:38 DELETE FROM \`mytest\`.\`user\` WHERE \`addtime\`='2016-11-11' AND \`id\`=3 AND \`name\`='小孙' LIMIT 1; #start 10879 end 11138 time 2023-09-18 14:19:38 python binlog2sql.py -h127.0.0.1 -P3306 -uroot -p'1234' -dmytest -tuser --start-file='mysql-bin.000026' --start-position=10879 --stop-position=11138 -B \> /tmp/rollback.sql vi rollback.sql INSERT INTO \`mytest\`.\`user\`(\`addtime\`, \`id\`, \`name\`) VALUES ('2016-11-11', 3, '小孙'); #start 10879 end 11138 time 2023-09-18 14:19:38 INSERT INTO \`mytest\`.\`user\`(\`addtime\`, \`id\`, \`name\`) VALUES ('2014-11-11', 2, '小钱'); #start 10879 end 11138 time 2023-09-18 14:19:38 **5)与业务方确认回滚sql没问题,执行回滚语句。登录mysql,确认回滚成功。** mysql\> source /tmp/rollback.sql; Query OK, 1 row affected (0.00 sec) Query OK, 1 row affected (0.00 sec) mysql\> select \* from mytest.user; +----+--------+------------+ \| id \| name \| addtime \| +----+--------+------------+ \| 1 \| 小赵 \| 2013-11-11 \| \| 2 \| 小钱 \| 2014-11-11 \| \| 3 \| 小孙 \| 2016-11-11 \| \| 4 \| 小李 \| 2013-11-11 \| +----+--------+------------+ 4 rows in set (0.00 sec) mysql\>

相关推荐
2501_9400940218 小时前
emu系列模拟器最新汉化版 安卓版 怀旧游戏模拟器全集附可运行游戏ROM
android·游戏·安卓·模拟器
下位子18 小时前
『OpenGL学习滤镜相机』- Day9: CameraX 基础集成
android·opengl
参宿四南河三20 小时前
Android Compose SideEffect(副作用)实例加倍详解
android·app
Java追光着20 小时前
ADB 无线调试 APP 完全攻略(2025 最新版)—— 从连接到查看日志,一文搞定!
adb
火柴就是我21 小时前
mmkv的 mmap 的理解
android
没有了遇见21 小时前
Android之直播宽高比和相机宽高比不支持后动态获取所支持的宽高比
android
shenshizhong21 小时前
揭开 kotlin 中协程的神秘面纱
android·kotlin
vivo高启强21 小时前
如何简单 hack agp 执行过程中的某个类
android
沐怡旸1 天前
【底层机制】 Android ION内存分配器深度解析
android·面试
你听得到111 天前
肝了半个月,我用 Flutter 写了个功能强大的图片编辑器,告别image_cropper
android·前端·flutter