MYSQL Binlog恢复误删数据库详解
作者:Mingvvv 发布时间:2024-01-27 06:17:30
对表误删或执行缺少条件的修改 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!!!
执行结束后我们在查询表内信息 ,删除的数据恢复了,而且我们修改过的记录也在。
来源:https://blog.csdn.net/qq_40096897/article/details/127900719
猜你喜欢
- 需求背景:用户希望他登录之后,浏览器就帮他记住登录状态,这样他就不用每次进入的时候,都需要登录一次。session过期时间:如果我们没有设置
- 本文系统的对HTTP Headers进行了简明易懂的阐述,我仅稍作笔记。什么是HTTP HeadersHTTP是“Hypertext Tra
- Window.ShowModalDialog使用手册 基本介绍: showModalDialog() (IE 4+ 支持) sho
- 如下所示:import cv2import numpy as npbins = np.arange(256).reshape(256,1)d
- 第一种打开PyCharm, 然后PyCharm -> Preferences -> 在搜索框中输入Project Interpr
- 零、SQLAlchemy是什么?SQLAlchemy的官网上写着它的介绍文字:SQLAlchemy is the Python SQL to
- python包-pdfkit 将HTML转换为PDF什么是pdfkitpdfkit,把HTML+CSS格式的文件转换成PDF格式文档的一种工
- 本文针对Python的全局变量实现方法简述如下:先来看下面一段测试程序:count = 0def Fuc(count): pri
- 觉得微博手动点赞太过麻烦?其实自动点赞的实现并不困难!本篇会有Cookie、session和token方面的知识,不太了解的可以先看下web
- 这是fenye.asp具体代码:以下是引用片段:<%Const maxPagesize=1000 '设置分
- 前言大家好,我是苏凉,在前面我们已经学习了网络爬虫并且获取到了数据,接下来当然是对数据进行分析啦,本篇文章带大家进入新的模块:pyhon数据
- 随着网页技术的发展,网络视觉设计与之前以程序员为主导的审美特征相比,具有了极大的改观。同时,随着美术、音乐、舞蹈人才的加入,网络开始在这一社
- 身为一名小小的程序猿,在日常开发中不可以避免的要和where in和like打交道,在大多数情况下我们传的参数不多简单做下单引号、敏感字符转
- 在1943年,沃伦麦卡洛可与沃尔特皮茨提出了第一个脑神经元的抽象模型,简称麦卡洛可-皮茨神经元(McCullock-Pitts neuron
- [PHP] ; PHP还是一个不断发展的工具,其功能还在不断地删减 ; 而php.ini的设置更改可以反映出相当的变化,
- 使用django启动命令行和脚本,可以方便的使用django框架做开发,例如,数据库的操作等。下面分别介绍使用方法。django shell
- Fiddler,这个是所有软件开发者必备神器!这款工具不仅可以抓取PC上开发web时候的数据包,而且可以抓取移动端(Android,Ipho
- 功能描述:1)使用tkinter设计程序界面;2)调用Windows API函数实现录音机和音乐播放器。参考代码:运行界面:总结以上所述是小
- 在看视频教程的时候提到了[{'a' : 97}, {'b' : 98}, {'c' : 99
- 最近在实习,boss给布置了一个python的小任务,学习过程中发现copy()和deepcopy()这对好 * 实在是有点过分,搞的博主就有