mysql误删后使用binlog恢复数据

news2025/1/18 4:37:02

1 预期效果

使用 binlog 恢复数据的预期效果是将误删的数据还原到误删之前的状态,以减少或消除数据丢失的影响。通过正确解析和执行 binlog 中的操作记录,可以重新执行误删操作之后的插入、更新或删除操作,从而恢复被误删的数据。

  1. 数据恢复:通过恢复误删操作之后的操作记录,可以将误删的数据重新插入到数据库中,还原到误删之前的状态。这意味着恢复后的数据库将包含被误删的数据,以及误删之后的其他操作。

  2. 数据一致性:如果只选择了误删操作之后的操作记录进行恢复,而忽略了其他更改操作,可以确保恢复后的数据保持一致性。这意味着只有被误删的数据会恢复,而其他更改操作不会被重新执行。

  3. 最小化数据丢失:使用 binlog 恢复数据可以最小化数据丢失的影响。通过恢复误删操作之后的操作记录,可以尽可能地还原被误删的数据,而无需依赖数据库备份或其他手段。

需要注意的是,预期效果可能受到以下因素的影响:

  • 其他更改操作:如果误删操作之后进行了其他更改操作,恢复过程可能会导致这些操作被重新执行,可能会引起数据不一致或冲突。因此,在执行恢复操作之前,应仔细分析 binlog 文件,并选择适当的操作记录进行恢复。

  • 数据库状态和依赖项:误删操作可能依赖于特定的数据库状态或外部数据。在执行恢复操作之前,应确保数据库的环境和依赖项与误删操作发生时相同,以确保恢复的数据能够正确关联和使用。

  • 恢复操作的正确性:正确解析和执行 binlog 中的操作记录是关键。在执行恢复操作之前,应仔细验证和测试恢复过程,确保操作记录的准确性和正确性。

2实现原理

binlog记录了数据库中的所有更改操作,以便在需要时进行数据恢复、主从复制和数据审计等操作。通过解析和分析binlog,可以还原数据库中的数据更改历史,并进行相应的操作,例如数据恢复或主从复制等

下面是使用 binlog 恢复数据的一般原理:

  1. 确认误删的时间点:首先,需要确定误删操作发生的时间点。这将帮助你确定要恢复的数据范围,以便从 binlog 中提取相应的操作记录。

  2. 导出 binlog 文件:找到包含误删操作的 binlog 文件。这通常是通过查看 MySQL 数据库的配置文件(如 my.cnf 或 my.ini)中的 binlog 相关配置参数来确定。将该 binlog 文件复制到安全的位置,以便进行恢复操作。

  3. 解析 binlog 文件:使用 mysqlbinlog 工具来解析 binlog 文件,并将其转换为可读的 SQL 语句。例如,可以执行以下命令:mysqlbinlog binlog-file > output.sq              其中 binlog-file 是实际的 binlog 文件名,output.sql 是输出的 SQL 文件,包含了所有的操作记录。

  4. 过滤和恢复操作:在生成的 SQL 文件中,可以根据误删操作发生的时间点,选择需要恢复的操作记录。可以手动编辑 SQL 文件,删除不需要的操作记录,只保留误删操作之后的操作语句。确保只包含了需要恢复数据的操作。

  5. 执行恢复操作:使用数据库客户端连接到 MySQL 数据库,并执行编辑后的 SQL 文件,将其中的操作语句逐个重新执行。这将重新执行误删操作之后的操作,从而还原到误删前的数据状态。

需要注意的是,使用 binlog 恢复数据存在一些限制和风险,包括:

  • 误删操作之后的其他修改:如果误删操作之后的时间段内进行了其他更改操作,这些操作也将被重新执行,可能会导致数据不一致或冲突。在恢复数据之前,应仔细分析 binlog 文件,确保只恢复必要的操作。

  • 依赖外部数据和状态:如果误删操作涉及到外部数据或依赖于特定的数据库状态,恢复过程可能会受到影响。在执行恢复操作之前,确保数据库的环境和依赖项与误删操作发生时相同。

  • 数据库备份和恢复策略:为避免数据丢失和误删除的影响,建议实施定期的数据库备份和恢复策略,并测试和验证备份的可用性和完整性。

3实际操作

3.1 查看自己的binlog日志是否打开

在黑窗口中输入命令查看show variables like 'log_bin%' ;  ,一般都是默认打开的

  1. log_bin 变量被设置为 ON,表示二进制日志功能已经启用。

  2. log_bin_basename 显示二进制日志文件的路径和文件名前缀。

  3. log_bin_index 显示二进制日志索引文件的路径。

  4. 其他一些与二进制日志相关的配置项的值。

    sql_log_bin 是 MySQL 中一个非常有用的系统变量,它控制当前会话是否将执行的 SQL 语句记录到二进制日志中。

    可以通过SET sql_log_bin = 1;修改成ON

3.2 查看binlog文件

通过上一步查询的log_bin_basename得到的路径打开存储binlog文件的文件夹

可以看到已经有很多log文件了

(这里我们是要测试binlog恢复数据的使用,所以就日志文件都放到一个全新binlog文件中方便查询使用,如果是实际恢复数据的话,就要一个一个的在这些binlog文件中找自己要的那部分文件了。)

3.3 模拟数据库

在数据库中进行 flush logs 命令可以新创一个binlog文件,接下来的操作也就会放到新的文件中了。此时再进入到上面这个文件夹中就会看到又多了一个文件叫做LAPTOP-595LBSCH-bin.000092

假设我们的数据库是7天一备份,然后binlog的过期时间是大于7天的,那么通过备份的数据库+binlog文件就能够恢复数据库到达7天内的任意一个时间点的状态。,下面是一个模拟备份的行为

之后我们进行一些操作,模拟正常数据库操作

​
​
​
添加一条数据:
INSERT INTO `user` (`id`, `name`) VALUES (6, '老六');
将小二改成张三丰:
UPDATE `user` SET `name` = '张三丰' WHERE `id` = 1;
将王五改成王伟:
UPDATE `user` SET `name` = '王伟' WHERE `name` = '王五';
删除整个表:
DROP TABLE `user`;

​

​

​

经过这些操作之后!

3.4 恢复操作实战

现在的处境就是整个表都被删除了,我们想要实现将数据库改成王五刚被改成王伟的数据库的模样

我们要做的就是将上次备份的数据库恢复,然后从上次备份的时间点 - > 到王五刚被改成王伟的时间点   中的binlog操作都找到

3.41、我们在binlog所在的文件夹位置打开黑窗口,然后运行,(注意LAPTOP-595LBSCH-bin.000092是因为测试时候知道刚才的操作一定就在这个文件中,如果不知道就需要逐个打开多个binlog文件然后自己找你想要的那个时间点,)

mysqlbinlog -v --set-charset=utf8mb4 LAPTOP-595LBSCH-bin.000092 > output.txt

之后通过打开这个output.txt文件可能有部分乱码(乱码自己解决,如果实在解决不了只能猜了。),比如找到这一部分,意思就是将王五改成王五的操作,他们的执行行数在1109另一种办法就是在mysql中使用show binlog events in 'LAPTOP-595LBSCH-bin.000092';来查看binlog中的日志,

我们可以看到有4个数据,有写入数据,删除更新数据等,还有最后一个是drop table。

经过这些我们已经得到了想要的信息,数据库上次备份后的binlog开始时间应该是317也就是备份后的第一条ddl语句的begin时间,然后我们想要恢复到的时间是1109日志文件的名字叫做LAPTOP-595LBSCH-bin.000092也就是更新王五那步操作的commit行,之后就是将这个时间段内binlog记录的操作都输入到备份的数据库中

下面这部操作是在不登陆mysql的黑窗口运行的, | mysql -uroot -p<数据库密码>的意思就是将前面步骤操作的结果输入到后面的命令中

mysqlbinlog --no-defaults --start-position=317 --stop-position=1109 LAPTOP-595LBSCH-bin.000092 | mysql -uroot -p<数据库密码>

此时打开数据库就会发现,数据库已经成功恢复到了删表之前的状态了。

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

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

相关文章

二.Flowable自带Demo(Flowable-UI)体验

问题反馈 如有问题可通过微信公众号“假装正经的程序员”反馈 Flowable-UI是什么 Flowable-UI是flowable自带的一套供开发人员体验的系统&#xff0c;它通过后台的UI建模&#xff0c;让开发人员了解Flowable的工作流程&#xff0c;同时它部署简单&#xff0c;只需要将对应的w…

医学AI最新研究·哈佛医学院·告别切片局限:3D病理如何革新癌症预后

小罗碎碎念 本期文章分享的主要是AI与肿瘤的复发、转移相关的最新研究。 筛选规则如下&#xff1a; (artificial intelligence or deep Learning or convolutional networks or transformer or selfattention or machine learning) and (Tumor metastasis or Recurrence of Ca…

Windows系统安装OpenSSH使用VScode远程连接内网Linux服务器开发

文章目录 &#x1f4a1;推荐 前言1、安装OpenSSH2、VS Code配置ssh3. 局域网测试连接远程服务器4. 公网远程连接4.1 ubuntu安装cpolar内网穿透4.2 创建隧道映射4.3 测试公网远程连接 5. 配置固定TCP端口地址5.1 保留一个固定TCP端口地址5.2 配置固定TCP端口地址5.3 测试固定公网…

视频批量裁剪助手:一键式高效缩小视频尺寸,极速提升工作效率的必备神器!

视频已经成为我们日常生活和工作中不可或缺的一部分。无论是个人vlog、企业宣传片&#xff0c;还是教学视频、广告素材&#xff0c;视频都承载着大量的信息和情感。然而&#xff0c;很多时候&#xff0c;我们手中的视频尺寸并不符合我们的需求&#xff0c;这时&#xff0c;一款…

Xilinx(AMD) FPGA通过ICAP原语读取芯片IDCODE实现方法

1 概述 Xilinx每种型号的FPGA芯片都有一个唯一的IDCODE与之对应&#xff0c;同一型号不同封装的IDCODE是相同的。IDCODE的获取方法包括JTAG、ICAP原语、AXI_HWICAP IP核等。获取IDCODE常用于根据芯片型号改变代码的功能&#xff0c;或者对代码进行授权保护&#xff0c;只能在指…

ROS | 用C++和python实现运动控制功能

基础知识&#xff1a; 用C实现&#xff1a; C代码&#xff1a; 用python实现&#xff1a; Python代码&#xff1a;

【编译原理复习笔记】语法分析-补充(二义性与LR错误处理)

二义性文法的 LR 分析 每个二义性文法都不是 LR 的 但是某些二义性文法更加简短&#xff0c;描述更方便 如 I7 和 I8 具有移进归约冲突 使用优先级和结合性解决冲突 对于 I7&#xff0c;由于乘号优先级高于加号&#xff0c;所以当下一个输入符号为乘号时&#xff0c;我们优…

Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明

Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明 目录 Python 机器学习 基础 之 数据表示与特征工程 【单变量非线性变换 / 自动化特征选择/利用专家知识】的简单说明 一、简单介绍 二、单变量非线性变换 三、自…

设计模式11——代理模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 代理模式&#xff08;Proxy&am…

mfc100u.dll缺失怎么解决,详细分析mfc100u.dll文件属性

mfc100u.dll文件缺失是一个常见的问题&#xff0c;这通常由计算机在执行操作时不慎造成的dll文件遗失引起。作为一个关键的dll文件&#xff0c;如果没有mfc100u.dll&#xff0c;可能会导致程序无法启动或系统错误。下面&#xff0c;我们将讨论几种解决mfc100u.dll文件遗失的方法…

弘君资本午评:三大股指全线走低,北证50指数逆市涨逾3%

23日早盘&#xff0c;三大股指低开低走&#xff0c;盘中均跌超1%&#xff0c;北证50指数逆市拉升&#xff0c;一度涨超4%&#xff1b;两市半日成交近5300亿元。 到午间收盘&#xff0c;沪指跌1%报3126.82点&#xff0c;深证成指跌1.19%&#xff0c;创业板指跌0.98%&#xff0c…

5月23日 网络编程day6

1.IO多路复用的原理&#xff1f; 答&#xff1a;将文件描述符放入一个集合中&#xff0c;当集合中有事件产生&#xff0c;移除其他文件描述符&#xff0c;执行剩下的文件描述符所对应的任务&#xff0c;往复循环。 2.实现IO多路复用可以使用哪些函数完成&#xff1f; 答&…

深度学习之体育运动项目姿态估计识别计数系统

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 在体育运动领域&#xff0c;对运动员的姿态进行准确估计和识别&#xff0c;以及对运动员数量进行精确…

苹果MacOS系统使用微软远程桌面连接Windows电脑桌面详细步骤

文章目录 前言1. 测试本地局域网内远程控制1.1 Windows打开远程桌面1.2 局域网远程控制windows 2. 测试Mac公网远程控制windows2.1 在windows电脑上安装cpolar2.2 Mac公网远程windows 3. 配置公网固定TCP地址 前言 日常工作生活中&#xff0c;有时候会涉及到不同设备不同操作系…

软件下载系统asp.net

本项目实现电子书下载网站的功能&#xff0c;实现文章、管理员分类&#xff0c;友情连接的管理以及对前台页面的静态化。网站前台实现对电子书的详细信息介绍和提供下载。 说明文档 运行前附加数据库.mdf&#xff08;或sql生成数据库&#xff09; 主要技术&#xff1a; 基于a…

2024 Google I/O - 提前窥探 Android 15 的新功能与适配

今年年初就简单介绍过 Android 15 预览版 的相关内容&#xff0c;而昨天 Google I/O 宣布了 Android 15 Beta2&#xff0c;作为第二个 Beta 版本 &#xff0c;它已经基本接近它未来的样子&#xff0c;毕竟下个版本就是 Platform Stability 了&#xff0c;所以让我们提前来一睹 …

绿色智能:AI机器学习在环境保护中的深度应用与实践案例

&#x1f9d1; 博主简介&#xff1a;阿里巴巴嵌入式技术专家&#xff0c;深耕嵌入式人工智能领域&#xff0c;具备多年的嵌入式硬件产品研发管理经验。 &#x1f4d2; 博客介绍&#xff1a;分享嵌入式开发领域的相关知识、经验、思考和感悟&#xff0c;欢迎关注。提供嵌入式方向…

IDEA如何对多线程进行debug

开发中使用到多线程的时候不少,但是debug起来还是比较困难的,因为默认每次只会进入一个线程,这样有些问题是发现不了的,其实IDEA也是支持进入每个线程来debug的 写一个简单的demo public class ThreadDebug {public static void main(String[] args) {MyThread myThread new…

04-Vue:ref获取页面节点--很简单

目录 前言在Vue中&#xff0c;通过 ref 属性获取DOM元素使用 ref 属性获取整个子组件&#xff08;父组件调用子组件的方法&#xff09; 前言 我们接着上一篇文章 03-02-Vue组件之间的传值 来讲。 下一篇文章 05-Vue路由 在Vue中&#xff0c;通过 ref 属性获取DOM元素 我们当然…

前端基础:1-2 面向对象 + Promise

面向对象 对象是什么&#xff1f;为什么要面向对象&#xff1f; 通过代码抽象&#xff0c;进而藐视某个种类物体的方式 特点&#xff1a;逻辑上迁移更加灵活、代码复用性更高、高度的模块化 对象的理解 对象是对于单个物体的简单抽象对象是容器&#xff0c;封装了属性 &am…