binlog恢复MySQL数据

发布时间 2023-07-14 10:57:11作者: 往事已成昨天

binlog恢复MySQL数据,7步快速搞定,值得收藏!

删库不跑路,用 binlog 来恢复。

 

binlog 是二进制日志文件,它的作用一是增量备份,作用二是主从复制,即主节点维护一个 binlog 日志文件,从节点从 binlog 中同步数据。

 

图片

除此之外,还可以通过 binlog 日志来实现高级数据的恢复。

 

大家好,我是爱分享的程序员宝妹儿,分享即学习。

 

上一篇介绍了:Binlog实现MySQL主从复制,本篇探讨:怎么使用 binlog 恢复 MySQL 数据

 

 

这也是 MySQL 的重要知识点及高频面试点,宝妹儿顺便将这个题目以及答案,整理到2023版《MySQL 大厂高频面试题大全》PDF了,方便系统学习、面试通关。

宝妹儿精编的2023版《MySQL 大厂高频面试题大全》,已收录了100+道真题,近30000字,长期迭代、持续更新。吃透它,应付MySQL面试没问题。

 

公号Java面试题宝,自取。

 

01我们有一定概率会遇到 

 

在生产环境中,数据库难免会遇到一些突发的特殊情况,例如:

  • 不小心把数据给删除了

  • 数据被误操作修改了

  • 磁盘故障、文件损坏,数据丢失或损坏了

  • 数据库崩溃或服务器故障

     

图片

在实际应用场景中,有些意外和突发事件是难以避免的,如果遇到了上述情况,可以使用 binlog 来恢复 MySQL 数据。

 

02使用 binlog 恢复数据的必要条件

 

使用 binlog 恢复数据的前提是要有备份数据,备份可以是完整的数据库备份,也可以是定期的增量备份。

 

03 binlog 恢复数据的操作方法

 

binlog 恢复数据主要有如下 7 个步骤:

1)查看当前 binlog 的位置

 

首先,我们要确定需要恢复的时间点(范围),定位需要恢复的数据以及相关的 binlog 文件。


mysql> show master status;+------------------+----------+--------------+------------------+-------------------+| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000008 |     1847 |              |                  |                   |+------------------+----------+--------------+------------------+-------------------+

 

2)tb_person 表中插入两条记录

 

insert into tb_person  set name="person_1", address="beijing", sex="man", other="test-1";insert into tb_person  set name="person_2", address="beijing", sex="man", other="test-2";

 

3)记录当前 binlog 位置


mysql> show master status;       +------------------+----------+--------------+------------------+-------------------+       | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |       +------------------+----------+--------------+------------------+-------------------+       | mysql-bin.000008 |     2585 |              |                  |                   |       +------------------+----------+--------------+------------------+-------------------+

 

4)查询数据

mysql> select *  from tb_person where name ="person_2" or name="person_1";+----+----------+---------+-----+--------+| id | name     | address | sex | other  |+----+----------+---------+-----+--------+|  6 | person_1 | beijing | man | test-1 ||  7 | person_2 | beijing | man | test-2 |+----+----------+---------+-----+--------+

5)删除一条: delete from tb_person where name ="person_2";

mysql> select *  from tb_person where name ="person_2" or name="person_1";+----+----------+---------+-----+--------+| id | name     | address | sex | other  |+----+----------+---------+-----+--------+|  6 | person_1 | beijing | man | test-1 |+----+----------+---------+-----+--------+

6)binlog 恢复(指定 pos 点恢复/部分恢复)

mysqlbinlog   --start-position=1847  --stop-position=2585  mysql-bin.000008  > test.sqlmysql> source /var/lib/mysql/3306/test.sql

7)数据恢复完成

mysql> select *  from tb_person where name ="person_2" or name="person_1";+----+----------+---------+-----+--------+| id | name     | address | sex | other  |+----+----------+---------+-----+--------+|  6 | person_1 | beijing | man | test-1 ||  7 | person_2 | beijing | man | test-2 |+----+----------+---------+-----+--------+

再来看一个示例:

某个电商系统中,有一个名为 orders 的数据表,存储了订单信息,因误操作部分订单数据被删除了。

现在要使用 binlog 来恢复这些被删除的订单数据。

准备工作

 

首先,要确保 MySQL 数据库已启用 binlog 功能,并且相关的 binlog 日志文件已经生成。

 

通过查看 MySQL 配置文件或运行以下命令来确认:

SHOW VARIABLES LIKE 'log_bin';
log_bin 的值为 ON,表示 binlog 功能已启用。

 

查找删除操作的 binlog 位置

确定删除操作在 binlog 中的位置,找到删除操作发生的时间点对应的 binlog 文件名及位置

 

查找步骤:

 

查看表结构,确定要恢复的数据表名称,例如 orders


SHOW CREATE TABLE orders;

进入 MySQL 的命令行终端,执行以下命令:

FLUSH LOGS;

刷新 binlog ,生成一个新的 binlog 文件。

执行删除操作之后,再执行以下命令:

SHOW BINLOG EVENTS;

显示当前所有的 binlog 事件,并查找与删除操作相关的事件,记录对应的 binlog 文件名和位置。

创建恢复脚本

 

找到删除操作在 binlog 中的位置之后,再创建恢复脚本。这个脚本将利用 binlog 日志文件中的信息来恢复被删除的数据。

 

设置恢复起始位置

SET GLOBAL gtid_purged = 'BINLOG_FILE_NAME:BINLOG_POSITION';
恢复数据
BEGIN;ROLLBACK TO BINLOG 'BINLOG_FILE_NAME' , BINLOG_POSITION;COMMIT;

将上述脚本中的 BINLOG_FILE_NAME 和 BINLOG_POSITION ,替换为实际的 binlog 文件名和位置。

执行该脚本后,会回滚到指定的 binlog 位置。

执行恢复操作

 

执行上一步创建的恢复脚本来还原被删除的数据。在 MySQL 命令行终端中,执行以下命令:

SOURCE /path/to/recovery_script.sql;

确保将 /path/to/recovery_script.sql 替换为实际的恢复脚本文件路径。

执行该命令后,MySQL 将根据 binlog 文件中的信息恢复数据,并将被删除的订单数据还原到之前的状态。

验证和测试恢复结果

这是最后一步,执行一些查询操作,来检查下数据是否正确恢复,并与备份数据进行对比。

SELECT * FROM orders;

逐行检查结果,确保被删除的订单数据已恢复,并与备份数据保持一致。

 

04 总结 

 

本文介绍了使用 binlog 恢复 MySQL 数据的 7 个重要步骤,并且用电商示例做了进一步解析。

使用 binlog 恢复 MySQL 数据,简单地说,就是让 MySQL 将保存在 binlog 日志中指定段落区间的 sql 语句,逐个重新执行一次而已。

在进行 MySQL 数据恢复时,需要考虑数据一致性、数据依赖关系以及恢复后的验证等问题。

最后,宝妹儿再提醒下:在进行任何数据恢复操作前,记得一定要备份所有数据。

我是爱分享的程序员宝妹儿,分享即学习。

如果觉得有用,请顺手【点赞】支持下哦,这将是对宝妹儿的最大鼓励,谢谢~

PS. 

 

本文收录于宝妹儿精编的 2023版《MySQL 大厂高频面试题大全》PDF。

 

搞定这100道题,足以应对MySQL面试。

 

图片

图片

图片

图片 end图片

 

免费获取下方资料方法,公众号后台回复:题宝

图片

 

收录于合集 #mysql
 13
上一篇Binlog实现MySQL复制,5个关键步骤,务必掌握!下一篇图解bin log、redo log及undo log区别,2分钟吃透!
阅读 410
程序员宝妹儿
26篇原创内容