在日常数据库运维中,数据意外丢失是令人头疼的问题。然而,mysql的二进制日志(binary log)就像一个“时光机器”,记录着数据库的所有变更,使我们能够将数据库恢复到任意时间点。本文将通过一个实际案例,详细介绍如何利用二进制日志进行数据恢复。
- 启用二进制日志文件
要使用二进制日志功能,首先需要在mysql配置文件中启用它:
# 1. 修改MySQL配置文件 vim /etc/my.cnf <h1>在[mysqld]部分添加以下内容</h1><p>[mysqld] log-bin=/usr/local/mysql/data/mysql-bin server-id=1 binlog_format=MIXED</p><h1>2. 重启MySQL服务</h1><p>systemctl restart mysqld
- 实战案例:数据库操作与恢复
2.1 初始数据状态
我们的测试表中初始包含三条记录:
mysql> select * from test.person; +------+------+------+ | id | name | age | +------+------+------+ | 1 | San | 19 | | 2 | mike | 23 | | 3 | li | 20 | +------+------+------+
以下操作不会记录在二进制日志文件中,因为它们是原有的数据操作。
2.2 数据变更操作
接下来我们执行了一系列操作:
- 插入了一条新记录(wang)
- 更新了mike的年龄
- 删除了id为3的记录
执行这些操作后,数据状态如下:
mysql> insert into test.person values(4,'wang',10); Query OK, 1 row affected (0.00 sec)</p><p>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</p><p>mysql> delete from test.person where id = 3; Query OK, 1 row affected (0.01 sec)</p><h1>这是数据更改后的操作</h1><p>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;</p><p>-- 查看当前正在写入的二进制日志文件 mysql> SHOW MASTER STATUS;</p><p>-- 查看二进制日志事件 mysql> SHOW BINLOG EVENTS IN 'mysql-bin.000001';
2.3 数据丢失模拟与恢复
假设发生了意外,所有数据被删除:
mysql> delete from test.person; Query OK, 3 rows affected (0.00 sec)</p><p>mysql> select * from test.person; Empty set (0.00 sec)
2.4 恢复数据
这时,我们可以使用二进制日志来恢复数据。我们需要恢复到插入id=4,name=wang的数据之前的状态,包括它:
mysqlbinlog --stop-position="2435" /usr/local/mysql/data/mysql-bin.000001 | mysql -u root -p
数据恢复成功。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END