首页 > 数据库 >生产数据恢复系列之使用my2sql恢复MySQL8 误删数据

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

时间:2024-09-29 12:33:48浏览次数:11  
标签:数据恢复 binlog MySQL8 误删 myoracle master mysql my2sql root

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

原创 我科绝伦 小周的数据库进阶之路    2024年09月25日 00:00 重庆

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

小周的数据库进阶之路 致力于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篇原创内容 公众号

 

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

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

 

 

我科绝伦

赞赏二维码喜欢作者

MySQL5 数据恢复3 日常运维11 日常运维小技巧2 MySQL · 目录 上一篇生产数据恢复系列之-MySQL8使用delete误删数据恢复下一篇生产数据恢复系列之使用binlog日志恢复truncate/drop误删数据 个人观点,仅供参考 阅读 384   ​             小周的数据库进阶之路     写留言 留言  

暂无留言

标签:数据恢复,binlog,MySQL8,误删,myoracle,master,mysql,my2sql,root
From: https://www.cnblogs.com/cheyunhua/p/18439445

相关文章

  • 电脑/硬盘/U盘数据恢复软件
    文件删了,数据丢了,不用怕在使用存储介质的时候出现了,硬盘、移动硬盘、笔记本硬盘提示未格式化;分区打不开;分区丢失;文件丢失;文件或目录损坏且无法读取;移动硬盘不显示盘符,不能格式化等故障。这种情况数据丢失几乎成了必然,原因可能是病毒侵入损坏文件、清空的回收站、移动设备误......
  • 解读MySQL8.0数据字典重构源码
    本文分享自华为云社区《【华为云MySQL技术专栏】MySQL8数据字典重构源码解读》,作者:GaussDB数据库1.背景介绍在MySQL5.7版本的使用实践过程中,我们很容易遇到DDL崩溃后导致数据不一致的问题,具体场景描述如下:主备高可用架构部署下,备机回放执行DROPTABLE的中途,因触发其它社区......
  • Mysql8.0启动时出现ERROR: Different lower_case_table_names settings for server ('
    分析:出现这个原因数据库启动后,调整lower_case_table_names参数导致的这个问题。mysql8.0之后,lower_case_table_names配置必须在安装好MySQL后,初始化mysql配置时才有效。一旦mysql启动后,再设置是无效的,而且启动报错。lower_case_table_names=1表示mysql是不区分大小写的......
  • 服务器数据恢复—存储中raid硬盘故障导致映射到服务器上的卷挂载不上的数据恢复案例
    服务器存储数据恢复环境&故障:一台存储上有一组由16块FC硬盘组建了一组raid。存储前面板上的对应10号和13号硬盘的故障灯亮起,存储映射到redhatlinux操作系统服务器上的卷挂载不上,业务中断。服务器存储数据恢复过程:1、通过存储的管理后台查看当前存储状态,管理后台报告逻辑卷状态......
  • ETL: 学习搭配PENTAHO-SERVER-CE-9.4.0.0-343 + MYSQL8.0.35 部分错误日志
     学习搭配PENTAHO-SERVER-CE-9.4.0.0-343+ MYSQL8.0.35 ,启动PENTAHO 后,日志显示:UsingCATALINA_BASE:"E:\Programs\pentaho-server\tomcat"UsingCATALINA_HOME:"E:\Programs\pentaho-server\tomcat"UsingCATALINA_TMPDIR:"E:\Programs......
  • 服务器数据恢复—SAN环境下LUN Mapping错误导致写操作不互斥,文件系统一致性出错的数据
    服务器数据恢复环境:SAN环境下一台存储设备中有一组由6块硬盘组建的RAID6磁盘阵列,划分若干LUN,MAP到不同业务的SOLARIS操作系统服务器上。服务器故障:用户新增了一台服务器,将存储中的某个LUN映射到新增加的这台服务器上。这个映射的LUN其实之前已经MAP到其他SOLARIS操作系统的服务......
  • MySQL8物理一键备份和恢复脚本分享
    MySQL8物理一键备份和恢复脚本分享原创 我科绝伦 小周的数据库进阶之路  2024年09月23日00:01 重庆热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者频率比较的内容,希望......
  • 教你玩转MySQL8物理备份利器Xtrabackup
    教你玩转MySQL8物理备份利器Xtrabackup原创 我科绝伦 小周的数据库进阶之路  2024年09月22日00:00 重庆热衷于分享各种干货知识,大家有想看或者想学的可以评论区留言,秉承着“开源知识来源于互联网,回归于互联网”的理念,分享一些日常工作中能用到或者频率比较的内容,......
  • 解读MySQL8.0数据字典重构源码
    摘要:本文对社区MySQL5.7到8.0演进过程中数据字典DD的重构(缓存,持久化),AtomicDDL的关键实现进行了分析。本文分享自华为云社区《【华为云MySQL技术专栏】MySQL8数据字典重构源码解读》,作者:GaussDB数据库1.背景介绍在MySQL5.7版本的使用实践过程中,我们很容易遇到DDL崩溃后导致数......
  • 被误删除的 GitLab 群组和项目该如何恢复?
    本文分享如何使用极狐GitLab的项目延迟删除功能来避免仓库被用户误操作。该功能设置了删除延时时间,在延时期间内,用户还可以对项目进行恢复。极狐GitLab为GitLab的中文发行版,中文版本对中国用户更友好。可以一键私有化部署,也可以直接使用SaaS。详细安装指南可以查看官网https:......