MYSQL Binlog恢复误删数据库详解

 更新时间:2022年11月18日 11:40:08   作者:Mingvvv  
MySQL一旦误删数据库之后恢复数据很麻烦,这里记录一下艰辛的恢复过程,这篇文章主要给大家介绍了关于如何利用MySQL的binlog恢复误删数据库的相关资料,需要的朋友可以参考下

对表误删或执行缺少条件的修改 SQL 导致修改了表内其他数据时,我们需要想办法将数据恢复回来。

先创建两个测试表 table_1

CREATE TABLE `table_1`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;

首先要确保开启了BINLOG日志

-- 查看日志状态
show variables like '%log_bin%';

之前没有开启 Binlog 日志的话下面的方法就不能继续操作了,开启日志的方法网上有很多,修改一下配置文件并重启 MYSQL 服务。

模拟删除

正常情况下,我们需要从线上正在使用的日志中查找信息,要考虑的因素会很多。

为了方便测试,这里重启了一个新的日志,后面的所有操作都会记录到新的日志文件中。

flush logs
-- 插入table1一些数据
insert into table_1(name) values  ('1'),('2'),('3'),('4'),('5'),('6'),('7'),('8'),('9'),('10')
-- 模拟删除表信息table1
delete from table_1 where id >5;
--然后修改table1的内容
update table_1 set name= Concat(name,'1') ;

修复步骤

我们需要删除的信息,并保留删除之后修改过的信息

-- 查看日志内容
show master status;
show binlog events in 'binlog.000023';

从上面的查询语句可以查询 binlog.000023 中记录的所有操作。

如图,我们在 993 的位置执行了删除表的操作,我们要把数据还原到这个位置之前

每一个事务从 Gtid 开始,Xid 结束。

有的时候,我们不确定这个位置在什么地方,但是我们有时间范围,可以根据时间范围缩小所有区间,这里需要用到 binlog 命令

以下是 Windows CMD 的命令实例:

mysqlbinlog.exe F:\Mysql\mysql-8.0.27-winx64\data\binlog.000021 --start-datetime="2022-11-17 13:00:00" --stop-datetime="2022-11-17 14:00:00"

控制台打印出来的结果和SQL查询出来的结果大致上是一样的。

找到我们要还原的位置之后,执行还原命令。

以下是 Windows CMD 的命令实例:

mysqlbinlog.exe F:\Mysql\mysql-8.0.27-winx64\data\binlog.000023 --stop-position=993 --database=dgcat | F:\Mysql\mysql-8.0.27-winx64\bin\mysql -uroot -p*****

执行后发现报错:

反馈 table_1表中已经有了主键 1 ,不能插入。是因为我们只指定了数据恢复的结束位置,而当前日志又包含了 table_1 的所有行插入记录,当恢复表时,他会重新插入这些行,导致和表内已存在的信息主键冲突。

因为我的 binlog 日志记录了 table_1 的所有操作记录。所以这里我选择将 table_1 清空,用日志恢复所有数据。

truncate table table_1

正常情况下,我们最好能确认下来数据恢复的开始位置。

再次执行恢复命令后,表内信息如下:

现在已经恢复了我们删除之前的状态,但是我们在删除之后还做了修改操作,我们还需要把修改操作也还原一下:

相当于跳过 delete 操作,1100 位置即是我们修改操作的开始位置,直至 1478 整个操作结束。

mysqlbinlog.exe F:\Mysql\mysql-8.0.27-winx64\data\binlog.000023 --start-position=1100 --stop-position=1478 --database=dgcat | F:\Mysql\mysql-8.0.27-winx64\bin\mysql -uroot -pzdm3713261995!!!

执行结束后我们在查询表内信息 ,删除的数据恢复了,而且我们修改过的记录也在。

到此这篇关于MYSQL Binlog恢复误删数据库详解的文章就介绍到这了,更多相关MYSQL Binlog恢复数据内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Mysql基础知识点汇总

    Mysql基础知识点汇总

    本文给大家汇总介绍了mysql的23个基础的知识点,这些都是学习mysql的必备知识,小伙伴们可以参考下。
    2015-09-09
  • MySQL删除表时I/O错误的原因分析与解决

    MySQL删除表时I/O错误的原因分析与解决

    这篇文章主要给大家介绍了关于MySQL删除表时I/O错误的原因分析与解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-08-08
  • 减少mysql主从数据同步延迟问题的详解

    减少mysql主从数据同步延迟问题的详解

    本篇文章是对减少mysql主从数据同步延迟的问题进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL中dd::columns表结构转table过程及应用详解

    MySQL中dd::columns表结构转table过程及应用详解

    MySQL的dd表是用来存放表结构和各种建表信息的,客户端建的表都存在mysql.table和mysql.columns表里,还有一个表mysql.column_type_elements比较特殊,用来存放SET和ENUM类型的字段集合值信息,对mysql dd::columns表结构相关知识感兴趣的朋友一起看看吧
    2022-09-09
  • 手把手教你Navicat如何导出Excel格式的表结构

    手把手教你Navicat如何导出Excel格式的表结构

    我们在开发中使用数据库时往往需要做一些备份之类的,或者需要导出下表结构导入到其他数据库等,下面这篇文章主要给大家介绍了关于Navicat如何导出Excel格式的表结构的相关资料,需要的朋友可以参考下
    2023-04-04
  • 带你5分钟读懂MySQL字符集设置

    带你5分钟读懂MySQL字符集设置

    本文详细介绍了mysql字符集、字符序的概念与联系,给大家分享了多种方式查看MYSQL支持的字符集。具体内容详情大家参考下本文
    2018-01-01
  • 如何配置全世界最小的 MySQL 服务器

    如何配置全世界最小的 MySQL 服务器

    Intel Edison 是一个小巧的计算机基于 22 nm 的 Silvermont 双核 Intel Atom CPU 主频 500MHz运行 Linux (叫做 Yocto 的基于 Ubuntu 的发布版)。为了对 Edison 进行编程,我们需要一块接口板。可以选择的板子包括兼容Arduino的接口板 (包含了 SD 卡) 还有 Intel 接口板。
    2016-04-04
  • mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

    mysql通过frm和ibd文件恢复表_mysql5.7根据.frm和.ibd文件恢复表结构和数据

    文章主要介绍了如何从.frm和.ibd文件恢复MySQL InnoDB表结构和数据,需要的朋友可以参考下
    2025-03-03
  • mysql实现if语句判断功能的6种使用形式小结

    mysql实现if语句判断功能的6种使用形式小结

    这篇文章主要给大家介绍了关于mysql实现if语句判断功能的6种使用形式,MySQL的IF既可以作为表达式用,也可在存储过程中作为流程控制语句使用,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2023-07-07
  • 在Centos7中利用Shell脚本实现MySQL数据备份

    在Centos7中利用Shell脚本实现MySQL数据备份

    备份是容灾的基础,是指为防止系统出现操作失误或系统故障导致数据丢失,而将全部或部分数据集合从应用主机的硬盘或阵列复制到其它的存储介质的过程,本文将给大家介绍了在Centos7中利用Shell脚本实现MySQL数据备份,文中有详细的图文介绍,需要的朋友可以参考下
    2023-12-12

最新评论