生产数据恢复系列之使用my2sql恢复MySQL8 误删数据

news/2024/9/29 12:39:30

生产数据恢复系列之使用my2sql恢复MySQL8 误删数据

原创 我科绝伦 小周的数据库进阶之路
 

热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者频率比较的内容,希望大家能够喜欢,并提出宝贵地意见,我们一起提升,守住自己的饭碗。

小周的数据库进阶之路
致力于dba数据库经验分享、新手入门、原理解读、踩坑指南
173篇原创内容

一、my2sql概述

go版MySQL binlog解析工具,通过解析MySQL binlog ,可以生成原始SQL、回滚SQL、去除主键的INSERT SQL等,也可以生成DML统计信息。类似工具有binlog2sql、MyFlash、my2fback等,本工具基于my2fback、binlog_rollback工具二次开发而来。

二、功能

数据快速回滚(闪回)
主从切换后新master丢数据的修复
从binlog生成标准SQL,带来的衍生功能
生成DML统计信息,可以找到哪些表更新的比较频繁
IO高TPS高, 查出哪些表在频繁更新
找出某个时间点数据库是否有大事务或者长事务
主从延迟,分析主库执行的SQL语句
除了支持常规数据类型,对大部分工具不支持的数据类型做了支持,比如json、blob、text、emoji等数据类型sql生成

二、安装go语言

下载地址:https://golang.google.cn/dl/

图片
[root@myoracle ~]# tar xvf go1.23.1.linux-amd64.tar.gz -C /usr/local/
[root@myoracle ~]# vi /etc/profile.d/go.sh
添加以下内容
export PATH=$PATH:/usr/local/go/bin
[root@myoracle ~]# . /etc/profile.d/go.sh
[root@myoracle ~]# which go
[root@myoracle ~]# go version
图片

三、安装my2sql

下载地址:https://github.com/liuhr/my2sql?tab=readme-ov-file

这里我们上传下载好的包,大家也可以从我的网盘下载。

链接: https://pan.baidu.com/s/1exOgSXRytwDLzrdwUhuC4A提取码: idy4

图片

[root@myoracle ~]#unzip my2sql-master.zip
[root@myoracle ~]# cd my2sql-master[root@myoracle my2sql-master]# go build . #编译安装,没报错即安装成功

四、数据恢复

1、先模拟增加数据

root@localhost:(none)>create database if not exists test;
root@localhost:(none)>use test;
root@localhost:(none)>CREATE TABLE ceshi (id int NOT NULL AUTO_INCREMENT,a int NOT NULL,PRIMARY KEY (id)) ENGINE=InnoDB CHARSET=utf8mb4;
root@localhost:(none)>insert into ceshi values (1,1),(2,2);
图片

2、模拟误操作

root@localhost:test>select * from ceshi;
root@localhost:test>delete from ceshi where id=1;
root@localhost:test>select * from ceshi;
图片

3、查找误操作事务所在的Binlog并复制到新目录

图片

这里我们根据时间段,判断误操作事务所在的Binlog为mysql-bin.000006 也可以通过mysqlbinlog去查看

[root@myoracle mysql]# mysqlbinlog --no-defaults --base64-output=decode-rows -v -v /data/mysql/mysql-bin.000006 | awk '/###/{if($0~/UPDATE|INSERT|DELETE/)count[$2" "$NF]++}END{for(i in count)print i,"\t",count[i]}'|column -t|sort -k3nr
图片
[root@myoracle mysql]# cp /data/mysql/mysql-bin.000006 /root/my2sql-master

4、查看误操作事务开始和结束的位点

[root@myoracle my2sql-master]# mysqlbinlog mysql-bin.000006 --start-datetime='2024-09-23 19:00:00' --stop-datetime='2024-09-23 21:40:00' --base64-output=decode-rows -v > operation.sql 

[root@myoracle my2sql-master]# cat operation.sql

图片

从图中我们可以看到误操作开始的位点可以认为是1163,结束的位点是1207,my2sql可以根据时间点和POS点进行数据恢复。

5、分析在线binlog,正向解析SQL

[root@myoracle my2sql-master]# ./my2sql -user root -password 123456 -host 127.0.0.1 -port 3306 -mode repl -work-type 2sql -start-file mysql-bin.000006  -start-datetime "2024-09-23 19:00:00" -output-dir ./
图片
[root@myoracle my2sql-master]# cat forward.6.sql 
图片

6、分析在线binlog,生成回滚SQL

[root@myoracle my2sql-master]# ./my2sql -user root -password 123456 -host 127.0.0.1 -port 3306 -mode repl -work-type rollback -start-file mysql-bin.000006  -start-datetime "2024-09-23 19:00:00" -output-dir ./
[root@myoracle my2sql-master]# cat rollback.6.sql

图片

7、插入恢复的数据

root@localhost:test>INSERT INTO `test`.`ceshi` (`id`,`a`) VALUES (1,1);
root@localhost:test>select * from ceshi;

图片

8、其他

[root@myoracle my2sql-master]#./my2sql -user root -password 123456 -host 127.0.0.1 -port 3306 -mode file -work-type 2sql -local-binlog-file /data/mysql/mysql-bin.000006 -start-file /data/mysql/mysql-bin.000038  -start-datetime "2024-09-23 10:20:00" -output-dir ./tmpdir  #分析已经离线binlog,生成回滚SQL

五、总结

相比于Binlog2sql,my2sql的速度会快很多,而且有闪回的功能,但也有很多限制:

使用回滚/闪回功能时,binlog格式必须为row,且binlog_row_image=full, DML统计以及大事务分析不受影响
只能回滚DML, 不能回滚DDL
使用rollback功能时,要解析的binlog段,表结构要保持一致(例如:解析mysql-bin.000001文件,此binlog文件的的表有add column或drop column操作,则执行rollback可能会执行异常)
支持指定-tl时区来解释binlog中time/datetime字段的内容。开始时间-start-datetime与结束时间-stop-datetime也会使用此指定的时区, 但注意此开始与结束时间针对的是binlog event header中保存的unix timestamp。结果中的额外的datetime时间信息都是binlog event header中的unix timestamp
此工具是伪装成从库拉取binlog,需要连接数据库的用户有SELECT, REPLICATION SLAVE, REPLICATION CLIENT权限
MySQL8.0版本需要在配置文件中加入default_authentication_plugin =mysql_native_password,用户密码认证必须是mysql_native_password才能解析

 

小周的数据库进阶之路
致力于dba数据库经验分享、新手入门、原理解读、踩坑指南
173篇原创内容

 

文中的概念来源于互联网,如有侵权,请联系我删除。

欢迎关注公众号:小周的数据库进阶之路,一起交流数据库、中间件和云计算等技术。如果觉得读完本文有收获,可以转发给其他朋友,大家一起学习进步!感兴趣的朋友可以加我微信,拉您进群与业界的大佬们一起交流学习。

 

 

我科绝伦

赞赏二维码喜欢作者

MySQL · 目录
上一篇生产数据恢复系列之-MySQL8使用delete误删数据恢复下一篇生产数据恢复系列之使用binlog日志恢复truncate/drop误删数据
个人观点,仅供参考
阅读 384
 
 
 
 
 
 
 
 
写留言
留言
 

暂无留言

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/66124.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Pbootcms详情页链接的html后缀如何去掉

在PBootCMS中,去除详情页链接的 .html 后缀可以通过修改配置文件来实现。具体步骤如下: 步骤 1:修改配置文件打开配置文件:打开 core/convention.php 文件。找到并修改配置项:找到大约第 37 行的配置项 url_rule_suffix。示例代码 假设原有配置如下:// URL地址后缀名 url…

bevformer 3d目标检测 外参扰动 数据增强 试验

因为ego发生了旋转和位移,所以车上所有传感器的外参都将变化,所以把上述中的数据增强称为外参扰动。核心原则就是:把GT和bev的reference points统一到ego_new坐标系下。 GT变换:把原来在ego坐标系下的GT,变换到ego_new坐标系下,即【ego_new坐标系下的坐标值】=【ego2ego_…

南沙C++信奥老师解一本通题 1221:分成互质组

​【题目描述】给定n个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?【输入】第一行是一个正整数n。1 ≤ n ≤ 10。 第二行是n个不大于10000的正整数。【输出】一个正整数,即最少需要的组数。【输入样例】 6 14 20 33 117 143 175 【输出样例】 3#incl…

学期2024-2025-1 学号20241307《计算机基础与程序设计》第一周学习总结

作业信息这个作业属于哪个课程 (2024-2025-1-计算机基础与程序设计)这个作业要求在哪里 (2024-2025-1计算机基础与程序设计第一周作业)这个作业的目标作业正文 (学期2024-2025-1 学号20241307《计算机基础与程序设计》第一周学习总结)教材学习内容总结教材学习中的问题和解…

2024-2025-1 20241404《计算机基础与程序设计》第一周学习总结

这个作业属于哪个课程 2024-2025-1-计算机基础与程序设计这个作业要求在哪里 [2024-2025-1计算机基础与程序设计第一周作业]https://www.cnblogs.com/wangsiwen666/p/18439419这个作业的目标 作业具体目标是让我们能够培养自主思考能力,以及对教材的更深一步的理解,还能够让我…

云平台和虚拟化智慧运维监控,全面提升故障感知与处置能力

随着云计算、大数据技术等发展,虚拟化的普及不断深入,已成为现代IT基础设施建设中不可或缺的组成部分,成为推动企业数字化转型的关键力量。虚拟化的应用在降低软硬件成本和复杂性的同时,如何保障虚拟环境的高效运行,也给运维人员带来了更大的挑战。虚拟化监控运维方案通过…

枫叶冒险岛网页版单机联网安装教程+GM后台

今天给大家带来一款单机游戏的架设:枫叶冒险岛。另外:本人承接各种游戏架设(单机+联网)本人为了学习和研究软件内含的设计思想和原理,带了架设教程仅供娱乐。教程是本人亲自搭建成功的,绝对是完整可运行的,踩过的坑都给你们填上了。如果你是小白也没问题,跟着教程走也是…

杂项乱写 9.29

杂项乱写 9.29因为没有模拟赛,所以考虑捡捡之前漏下的小点。 注:LCA 之后的讲解中可能会出现一些自由的文字,酌情阅读。dfs 序求 LCA 倍增 LCA 的常数还是过于大了,虽然好记但会导致我们在一些数据奇异的题中比其它方式求 LCA 的人的得分要低。 所以就有了这个用 dfs 序求 …