在日常数据库运维中,数据的意外丢失是让人头疼的问题。而MySQL的二进制日志(binary log)就像一个"时光机器",记录着数据库的所有变更,让我们能够将数据库恢复到任意时间点。本文将通过一个实际案例,详细介绍如何利用二进制日志进行数据恢复。
要使用二进制日志功能,首先需要在MySQL配置文件中开启它:
# 1. 修改MySQL配置文件
vim /etc/my.cnf
# 在[mysqld]部分添加以下内容
[mysqld]
log-bin=/usr/local/mysql/data/mysql-bin
server-id=1
binlog_format=MIXED
# 2. 重启MySQL服务
systemctl restart mysqld
我们的测试表中初始包含三条记录:
mysql> select * from test.person;
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | San | 19 |
| 2 | mike | 23 |
| 3 | li | 20 |
+------+------+------+
以下操作 二进制日志文件 不会记录我原有的数据操作
接下来我们执行了一系列操作:
然后我们进行一些列的操作
增加 更改 删除 的操作!
mysql> insert into test.person values(4,'wang',10);
Query OK, 1 row affected (0.00 sec)
mysql> update test.person set age = 66 where name='mike';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> delete from test.person where id = 3;
Query OK, 1 row affected (0.01 sec)
#这是数据更改后的操作
mysql> select * from test.person ;
+------+------+------+
| id | name | age |
+------+------+------+
| 1 | San | 19 |
| 2 | mike | 66 |
| 4 | wang | 10 |
+------+------+------+
3 rows in set (0.00 sec)
-- 查看二进制日志文件列表
mysql> SHOW BINARY LOGS;
-- 查看当前正在写入的二进制日志文件
mysql> SHOW MASTER STATUS;
-- 查看二进制日志事件
mysql> SHOW BINLOG EVENTS IN 'mysql-bin.000001';
假设发生了意外,所有数据被删除:
mysql> delete from test.person;
Query OK, 3 rows affected (0.00 sec)
mysql> select * from test.person;
Empty set (0.00 sec)
这时,我们可以使用二进制日志来恢复数据:
现在我们以及把表单的所有数据恢复 接下来我们要恢复到 插入 id=4 name =wang 的数据之前包括它
mysqlbinlog --stop-position="2435" /usr/local/mysql/data/mysql-bin.000001 | mysql -u root -p
数据恢复成功
以上只是一个简单的案例 具体的恢复流程 需要满足你个人的需求 看以下我的参数介绍
-- 查看二进制日志文件列表
SHOW BINARY LOGS;
-- 查看当前正在写入的二进制日志文件
SHOW MASTER STATUS;
-- 查看二进制日志事件
SHOW BINLOG EVENTS IN 'mysql-bin.000001';
mysqlbinlog 在恢复数据时常用的参数 当然还有其他的参数 感兴趣的可以去查查
--start-position=pos # 起始位置
--stop-position=pos # 结束位置
#也可以单独使用
示例:
# 恢复指定位置范围内的事件
mysqlbinlog --start-position=1234 --stop-position=2435 mysql-bin.000001 | mysql -u root -p
--start-datetime="yyyy-mm-dd hh:mm:ss" # 起始时间
--stop-datetime="yyyy-mm-dd hh:mm:ss" # 结束时间
#也可以单独使用
示例:
# 恢复指定时间范围内的事件
mysqlbinlog --start-datetime="2024-01-01 00:00:00" --stop-datetime="2024-01-02 10:30:00" mysql-bin.000001 | mysql -u root -p
二进制日志不仅是MySQL主从复制的基础,更是数据恢复的重要工具。通过本文的实例,我们可以看到,只要正确配置和使用二进制日志,就能在数据意外丢失时及时找回数据,将损失降到最低。在实际工作中,建议定期检查二进制日志的状态,并制定相应的备份策略,为数据库安全多加一道保障。
这个版本的文章保留了所有技术细节,同时采用了更加个性化和易读的表达方式。通过实际案例的展示,让读者能够更直观地理解二进制日志的应用。如果您觉得还需要调整,我很乐意继续修改。
成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"
"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"
神秘泣男子
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。