MySQL數據庫:基于二進制日志的數據恢復實戰

在日常數據庫運維中,數據意外丟失是令人頭疼的問題。然而,mysql的二進制日志(binary log)就像一個“時光機器”,記錄著數據庫的所有變更,使我們能夠將數據庫恢復到任意時間點。本文將通過一個實際案例,詳細介紹如何利用二進制日志進行數據恢復。

  1. 啟用二進制日志文件

要使用二進制日志功能,首先需要在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
  1. 實戰案例:數據庫操作與恢復

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數據庫:基于二進制日志的數據恢復實戰

查看二進制文件:

-- 查看二進制日志文件列表 mysql> SHOW BINARY LOGS;</p><p>-- 查看當前正在寫入的二進制日志文件 mysql> SHOW MASTER STATUS;</p><p>-- 查看二進制日志事件 mysql> SHOW BINLOG EVENTS IN 'mysql-bin.000001';

MySQL數據庫:基于二進制日志的數據恢復實戰

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)

MySQL數據庫:基于二進制日志的數據恢復實戰

2.4 恢復數據

這時,我們可以使用二進制日志來恢復數據。我們需要恢復到插入id=4,name=wang的數據之前的狀態,包括它:

mysqlbinlog --stop-position="2435" /usr/local/mysql/data/mysql-bin.000001 | mysql -u root -p

數據恢復成功。

MySQL數據庫:基于二進制日志的數據恢復實戰

? 版權聲明
THE END
喜歡就支持一下吧
點贊15 分享