天天看點

如何通過 MySQL 的二進制日志恢複資料庫資料

作業系統:centos 6.5 x64  (虛拟機);

web 服務:php+mysql+apache;

<a target="_blank"></a>

要使用 mysql 的 binlog 日志功能,首先要在 mysql 的配置檔案中開啟該功能,操作很簡單。找到 mysql 的配置檔案,在檔案中添加一行 <code>log_bin = mysql-bin</code> 即可。其實在我安裝的各種 mysql 環境中,該功能通常都是預設開啟的。

開啟 binlog 功能後,在 mysql 的資料庫目錄下就會有諸如 <code>mysql-bin.000001</code>、<code>mysql-bin.000002</code>等檔案,這就是 mysql 的二進制日志檔案。每當 mysql 啟動或手動重新整理日志後都會建立一個二進制日志檔案。

首先我們 mysql 指令行中,用 <code>show master logs</code> 指令檢視已有的 binlog 檔案。

如何通過 MySQL 的二進制日志恢複資料庫資料

在網站背景文章子產品裡,我添加了幾條測試資料。

如何通過 MySQL 的二進制日志恢複資料庫資料

此前 mysql 的 binlog 檔案為 <code>mysql-bin.000001</code>,并且在網站背景往資料庫中添加了三篇文章。現在我們重新整理 binlog 日志,會生成新的 <code>mysql-bin.000002</code> 檔案,如下:

<code>flush logs;</code>

<code>show master logs;</code>

如何通過 MySQL 的二進制日志恢複資料庫資料

這裡我把剛才添加的三篇文章都删除掉。

mysql 的二進制日志檔案記錄的 mysql 的操作,比如剛才的删除操作,我們來看下日志檔案的具體内容。

使用 mysql 的 <code>mysqlbinlog</code> 指令:

<code>mysqlbinlog /data/mysql/mysql-bin.000002</code>

注意:因為我本地 <code>mysqlbinlog</code> 無法識别 binlog 配置中的 <code>default-character-set=utf8</code>,是以這裡我在指令中加上了 <code>–no-defaults</code>才起作用,大家引以為鑒。

如何通過 MySQL 的二進制日志恢複資料庫資料

下面是日志内容部分截圖:

如何通過 MySQL 的二進制日志恢複資料庫資料

在通過 mysql 的 binlog 日志恢複資料時,我們可以指定恢複到具體時間點,這有點像伺服器快照管理。是以我們現在要恢複剛才删除的那篇文章,可以從删除之前找一個時間點,并恢複到那個時間點即可。

有關 <code>mysqlbinlog</code> 指令的使用方法,我們可以通過 <code>mysqlbinlog</code> 的幫助指令進行檢視,如下:

<code>mysqlbinlog –no-defaults –help</code>

如何通過 MySQL 的二進制日志恢複資料庫資料

如幫助文檔所示,可以通過指定時間或指定位置來恢複資料,這裡我以指定時間為例給大家示範。

我們來檢視下日志檔案 <code>mysql-bin.000001</code>,如下:

<code>mysqlbinlog -no--defaults /data/mysql/mysql-bin.000001</code>

如何通過 MySQL 的二進制日志恢複資料庫資料

通過前面操作步驟我們知道,在删除資料之前,我們生成了 <code>mysql-bin.000002</code> 日志檔案,是以我們隻要恢複到這個時間點即可,上圖中我已找到了這個時間。

指令如下:

<code>mysqlbinlog –no-defaults –stop-datetime=’2017-04-11 09:48:48’/data/mysql/mysql-bin.000001 |mysql –uroot –p123456</code>

這時我們在看背景,發現剛才删除的三篇文章都已恢複回來了,進而到達我們期望的目的。

原文釋出時間為:2017-04-17

本文來自雲栖社群合作夥伴“linux中國”