binlog恢复MySQL数据
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.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面试。
![图片](https://img2023.cnblogs.com/blog/2948384/202307/2948384-20230714104713325-1580771886.png)
![图片](https://img2023.cnblogs.com/blog/2948384/202307/2948384-20230714104713325-1580771886.png)
免费获取下方资料方法,公众号后台回复:题宝
![图片](https://img2023.cnblogs.com/blog/2948384/202307/2948384-20230714104713325-1580771886.png)