数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog

《数据库灾难应对:MySQL误删除数据的救赎之道,技巧get起来!之binlog》

数据意外删除是数据库管理中常见的问题之一。MySQL作为广泛使用的数据库管理系统,当数据意外删除时,有几种方法可以尝试恢复数据。以下是binlog方式的数据恢复方法和步骤:

一、Binlog恢复数据

MySQL的二进制日志(Binary Log)可以用于数据的恢复,特别是在数据库发生灾难性故障或误操作时。二进制日志记录了数据库中所有对数据的更改操作,包括插入、更新和删除。以下是使用MySQL的二进制日志进行数据恢复的一般步骤:

1、启用二进制日志


确保MySQL服务器已启用二进制日志。你可以在MySQL配置文件(通常是 my.cnf)中添加或修改以下行来启用二进制日志:

[mysqld]
log-bin=/var/log/mysql/mysql-bin.log

然后重新启动MySQL服务。

2、查看二进制日志文件
 

使用以下命令查看当前二进制日志文件和文件位置:

#进入mysql控制台
mysql -uroot -p
#执行以下命令
mysql> show variables like 'log_%';

#当前binlog
mysql> SHOW MASTER STATUS;

记下输出中的 FilePosition,这将用于数据恢复。

#所有binlog
show master logs;

3、创建数据备份


在进行数据恢复之前,确保已经创建了数据库的备份,以防意外情况。 或者新建一个备份数据库用于测试恢复数据,恢复后再用于生产库。

4、导出二进制日志为sql语句


使用 mysqlbinlog 工具导出二进制日志。假设你的二进制日志文件是 mysql-bin.000001,则可以使用以下命令:

#全部导出
mysqlbinlog /var/log/mysql/mysql-bin.000001 > binlog_dump.sql
#指定一个时间区间来导出
mysqlbinlog --base64-output=decode-rows -v --database=数据库名 --start-datetime="2023-12-04 16:50:00" --stop-datetime="2023-12-04 17:10:10"  /var/log/mysql/mysql-bin.000001 > binlog_dump.sql

这将把二进制日志的内容导出到一个文本文件中。 mysqlbinlog 是 MySQL 提供的用于解析二进制日志文件的工具,它可以将二进制日志导出成可读的 SQL 语句。

5、通过时间或position恢复

  • 通过时间恢复

如果你记得大概数据删除或修改的时间就可以根据时间来恢复数据

#根据SHOW MASTER STATUS定位到日志文件,然后复制出来
cp /var/log/mysql/mysql-bin.000003 /data/
#按时间恢复
mysqlbinlog  --start-datetime="2023-12-08 16:10:00" --stop-datetime="2023-12-08 16:20:00" --database=数据库名 /data/mysql-bin.000003 | mysql -uroot -p123456 

执行完成后看是否报错,以下只是密码不安全警告,说明已经恢复完成,这里再检查一下自己的数据是否恢复了。

当然如果自己不知道大概的时间可以通过上面第4步导出的binlog_dump.sql进行查看

  • 通过position恢复

也可以根据position来恢复数据

#根据SHOW MASTER STATUS定位到日志文件,然后复制出来
cp /var/log/mysql/mysql-bin.000003 /data/
#查看事件
mysql> show binlog events in 'mysql-bin.000003';

通过分析事件找到相应的start-position与stop-position。

#通过position恢复
mysqlbinlog --start-position=2016 --stop-position=2336 --database=test  /data/mysql-bin.000003 | mysql -uroot -p123456;

当然在binlog_dump.sql文件里也是有的。

使用二进制日志进行数据恢复是一项敏感操作,确保在执行之前已经做好充分的备份,并仔细阅读和理解导出的二进制日志文件。此外,要确保二进制日志文件没有被过期或清理,以保证日志的完整性。

二、解读binlog_dump.sql

MySQL binlog,也称为二进制日志,是一个文件,包含了对 MySQL 服务器所做的所有数据修改的按时间顺序记录。它是以下几个关键功能的重要组成部分:

  • 复制: binlog 允许您将数据从一个 MySQL 服务器(主服务器)复制到一个或多个服务器(从服务器)。这确保了多个服务器之间数据的一致性,增强了容错性和可扩展性。
  • 时间点恢复 (PITR): 如果由于意外删除或硬件故障导致数据丢失,您可以使用 binlog 将数据库恢复到特定的时间点。这可以最大限度地减少数据丢失和停机时间。
  • 审计和跟踪更改: binlog 提供了数据库所做的所有更改的详细记录,使您可以跟踪用户活动、识别潜在问题并审计数据库修改。

binlog 的结构:

binlog 是一个二进制文件,包含一系列事件,每个事件描述特定的数据库修改。这些事件可以分为以下几类:

  • DML (数据操作语言): 如 INSERT、UPDATE 和 DELETE 语句,用于修改表中的数据。
  • DDL (数据定义语言): 如 CREATE TABLE、ALTER TABLE 和 DROP TABLE 语句,用于更改数据库的结构。
  • 管理事件: 如 XID (事务标识符) 和 BEGIN/COMMIT 语句,用于管理事务。

binlog 中的每个事件包含以下信息:

  • 时间戳: 事件发生的时间。
  • 服务器 ID: 生成事件的服务器的唯一标识符。
  • 结束日志位置: 事件在 binlog 文件中的位置。
  • CRC32: 用于确保数据完整性的校验和。
  • 事件类型: 事件的特定类型(例如,INSERT、UPDATE)。
  • 表 ID: 事件影响的表的标识符。
  • 标志: 有关事件的附加信息(例如,STMT_END_F)。
  • 数据: 对于 DML 事件,包括实际被修改的数据。

用于处理 binlog 的工具:

有几种工具可用于处理 binlog,包括:

  • mysqlbinlog: 此工具将 binlog 从二进制格式转换为人类可读格式,显示与每个事件对应的 SQL 语句。
  • binlog2sql: 与 mysqlbinlog 类似,但还生成可用于复制事件的 SQL 语句。
  • pt-archiver: 此工具可用于归档和管理 binlog 文件,方便数据保留和恢复。

以下是对MySQL二进制日志的注释和语法结构的说明:

  • binlog_dump.sql 示例

# 事务开始
BEGIN /*!*/;
# 事件头
# at 923
# 时间戳: 231208 16:03:57,服务器ID: 1,binlog事件起始位置: 923
# binlog事件结束位置: 981,CRC32哈希值: 0x7e80b732
# 事件类型: Table_map,表`test`.`user`映射到编号83
# 是否生成不可见主键: 否
# 下一个事件的起始位置: 981
# 事件标志: STMT_END_F
# 
# 更新行事件
# 表ID: 83,标志: STMT_END_F
# CRC32哈希值: 0xabb7709d
# binlog事件结束位置: 981
# 表`test`.`user`映射到编号83
# 更新行的数据
BINLOG '
7c1yZRMBAAAAOgAAANUDAAAAAFMAAAAAAAEABHRlc3QABHVzZXIAAgMPApABAgEBAAID/P8AMreA
fg==
7c1yZR8BAAAAPgAAABMEAAAAAFMAAAAAAAEAAgAC//8AAwAAAAYAbGlzaGkyAAMAAAAGAGxpc2hp
M51wt6s=
' /*!*/;

# 事件头
# 时间戳: 231208 16:03:57,服务器ID: 1,binlog事件结束位置: 1074
# 事务ID: 38
# 事务提交
COMMIT /*!*/;

以上示例中包含了一个事务,其中有一个表映射事件(Table_map)和更新行事件(Update_rows)。二进制日志的语法结构包括事务开始、事件头、具体事件内容(如表映射、更新行等),以及事务提交。每个事件都有特定的注释信息,描述了事件类型、时间戳、服务器ID、binlog事件的起始位置等。在这个例子中,更新行事件包含了更新表test.user的行的数据。

mysqlbinlog 工具将 binlog 导出为 SQL 语句的结构如下:

BEGIN;

# 表映射

...

# 事件

# 事件 1

...

# 事件 2

...

# 事件 n

COMMIT;

表映射

表映射部分将 binlog 中引用的表映射到内部标识符。这有助于 mysqlbinlog 更有效地解析 binlog。

事件

事件部分包含 binlog 中记录的每个操作。事件类型包括:

  • INSERT:插入新行
  • UPDATE:更新现有行
  • DELETE:删除现有行
  • DDL:数据定义语言(如创建表或更改表结构)
  • XID:事务结束

每个事件都包含以下信息:

  • 事件类型
  • 表 ID
  • 标志
  • 数据

BEGINCOMMIT 语句用于标记事务的开始和结束。

如果一个事务包含多个事件,则这些事件将按顺序排列在 BEGINCOMMIT 语句之间。

以下是一些示例:

# 表映射
Table_map: `test`.`user` mapped to number 123

# 事件 1
Update_rows: table id 123 flags: STMT_END_F

# 更新行
BINLOG '
7c1yZRMBAAAAOgAAANUDAAAAAFMAAAAAAAEABHRlc3QABHVzZXIAAgMPApABAgEBAAID/P8AMreA
fg==
';

# 事件 2
Xid = 38

这段 binlog 包含两个事件:

  • 第一个事件是 UPDATE 事件,它将 test.user 表中的行更新为 nameJohn Doe
  • 第二个事件是 XID 事件,它标记事务的结束。

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

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

相关文章

基于SpringBoot的房屋租赁系统 附源码

基于SpringBoot的房屋租赁系统 附源码 文章目录 基于SpringBoot的房屋租赁系统 附源码 一.引言二.系统设计三.技术架构四.功能实现五.界面展示六.源码获取 一.引言 本文介绍了一个基于SpringBoot的房屋租赁系统。该系统利用SpringBoot框架的优势,实现了用户注册、登…

采购oled屏幕,应注意什么

在采购OLED屏幕时,应注意以下几点: 规格和参数:了解OLED屏幕的规格和参数,包括尺寸、分辨率、亮度、对比度、响应时间等。确保所采购的屏幕符合项目的需求和预期效果。 品质和可靠性:选择具有可靠品质和稳定性的OLED屏…

分布式事务seata使用示例及注意事项

分布式事务seata使用示例及注意事项 示例说明代码调用方(微服务A)服务方(微服务B) 测试测试一 ,seata发挥作用,成功回滚!测试二:处理feignclient接口的返回类型从Integer变成String,…

Ngnix之反向代理、负载均衡、动静分离

目录 1. Ngnix 1.1 Linux系统Ngnix下载安装 1.2 反向代理 正向代理(Forward Proxy): 反向代理(Reverse Proxy): 1.3 负载均衡 1.4 动静分离 1. Ngnix Nginx是一个高性能的开源Web服务器&#xff0…

python识别增强静脉清晰度 opencv-python图像处理案例

一.任务说明 用python实现静脉清晰度提升。 二.代码实现 import cv2 import numpy as npdef enhance_blood_vessels(image):# 调整图像对比度和亮度enhanced_image cv2.convertScaleAbs(image, alpha0.5, beta40)# 应用CLAHE(对比度受限的自适应直方图均衡化&…

Future CompleteFuture

前言 Java8 中的 completeFuture 是对 Future 的扩展实现,主要是为了弥补 Future 没有相应的回调机制的缺陷。 Callable、Runnable、Future、CompletableFuture 之间的关系: Callable,有结果的同步行为,比如做蛋糕,…

python程序打包成exe全流程纪实(windows)

目录 前言准备工作安装python(必须)安装vs平台或conda(非必须) 详细步骤Step1.创建python虚拟环境方法一、裸装(windows下)方法二、借助工具(windows下) Step2.安装打包必须的python包Step3.准备好程序logo(非必须&…

51单片机定时器

51单片机有两个16位定时器,今天复习了一下使用方法,发现当初刚开始学习51单片机时并没有记录,特此今天补上这篇博客。 下面是定时器的总览示意图,看到这个图就能想到定时器怎么设置,怎么开始工作。 第一步&#xff1a…

刷完这个笔记,18K不能再少了....

大家好,最近有不少小伙伴在后台留言,得准备年后面试了,又不知道从何下手!为了帮大家节约时间,特意准备了一份面试相关的资料,内容非常的全面,真的可以好好补一补,希望大家在都能拿到…

EmbedAI:一个可以上传文件训练自己ChatGPT的AI工具,妈妈再也不用担心我的GPT不会回答问题

功能介绍: 个性化定制:提供灵活的训练选项,用户能够通过文件、网站、Notion文档甚至YouTube等多种数据源对ChatGPT进行训练,以满足不同领域和需求的个性化定制。广泛应用场景:ChatGPT支持多种用例,包括智能…

Jmeter吞吐量控制器使用小结

吞吐量控制器(Throughput Controller)场景: 在同一个线程组里, 有10个并发, 7个做A业务, 3个做B业务,要模拟这种场景,可以通过吞吐量模拟器来实现.。 添加吞吐量控制器 用法1: Percent Executions 在一个线程组内分别建立两个吞吐量控制器, 分别放业务A和业务B 吞吐量控制器采…

【算法系列篇】递归、搜索和回溯(三)

文章目录 前言什么是决策树1. 全排列1.1 题目要求1.2 做题思路1.3 代码实现 2. 子集2.1 题目要求2.2 做题思路2.3 代码实现 3. 找出所有子集的异或总和再求和3.1 题目要求3.2 做题思路3.3 代码实现 4. 全排列II4.1 题目要求4.2 做题思路4.3 代码实现 前言 前面我们通过几个题目…

蚂蚁集团5大开源项目获开放原子 “2023快速成长开源项目”

12月16日,在开放原子开源基金会主办的“2023开放原子开发者大会”上,蚂蚁集团主导开源的图数据库TuGraph、时序数据库CeresDB、隐私计算框架隐语SecretFlow、前端框架OpenSumi、数据域大模型开源框架DB-GPT入选“2023快速成长开源项目”。 (图…

Kafka中Ack应答级别和数据去重

在Kafka中,保证数据安全可靠的条件是: 数据完全可靠条件 ACK级别设置为-1 分区副本大于等于2 ISR里应答的最小副本数量大于等于2; Ack应答级别 可靠性总结: acks0,生产者发送过来数据就不管了,可靠性差…

2023年国赛高教杯数学建模D题圈养湖羊的空间利用率解题全过程文档及程序

2023年国赛高教杯数学建模 D题 圈养湖羊的空间利用率 原题再现 规模化的圈养养殖场通常根据牲畜的性别和生长阶段分群饲养,适应不同种类、不同阶段的牲畜对空间的不同要求,以保障牲畜安全和健康;与此同时,也要尽量减少空间闲置所…

人工智能深度学习:探索智能的深邃奥秘

导言 人工智能深度学习作为当今科技领域的明星,正引领着智能时代的浪潮。深度学习和机器学习作为人工智能领域的两大支柱,它们之间的关系既有协同合作,又存在着显著的区别。本文将深入研究深度学习在人工智能领域的角色,以及其在各…

Android Termux安装MySQL数据库并通过内网穿透实现公网远程访问

文章目录 前言1.安装MariaDB2.安装cpolar内网穿透工具3. 创建安全隧道映射mysql4. 公网远程连接5. 固定远程连接地址 前言 Android作为移动设备,尽管最初并非设计为服务器,但是随着技术的进步我们可以将Android配置为生产力工具,变成一个随身…

鸿蒙端H5容器化建设——JSB通信机制建设

1. 背景 2023年鸿蒙开发者大会上,华为宣布为了应对国外技术封锁的潜在风险,2024年的HarmonyOS NEXT版本中将不再兼容Android,并推出鸿蒙系统以及其自研的开发框架,形成开发生态闭环。同时,在更高维度上华为希望将鸿蒙…

GPT-4V被超越?SEED-Bench多模态大模型测评基准更新

📖 技术报告 SEED-Bench-1:https://arxiv.org/abs/2307.16125 SEED-Bench-2:https://arxiv.org/abs/2311.17092 🤗 测评数据 SEED-Bench-1:https://huggingface.co/datasets/AILab-CVC/SEED-Bench SEED-Bench-2&…

基于主动安全的AIGC数据安全建设

面对AIGC带来的数据安全新问题,是不是就应该一刀切禁止AIGC的研究利用呢?答案是否定的。要发展AIGC,也要主动积极地对AIGC的数据安全进行建设。让AIGC更加安全、可靠的为用户服务。为达到此目的,应该从三个方面来开展AIGC的数据安…