MySQL binlog日誌恢復數據

我們瞭解了MySQL 的 binlog 日誌的開啓方式以及 binlog 日誌的一些原理和常用操作,我們知道,binlog 有兩大作用,一個是使用 binlog 恢復數據,另一個就是用來做主從複製。本篇筆記就是來記錄如何使用 binlog 日誌來做數據恢復。當然了,使用 binlog 日誌所恢復的數據只能是部分數據,並不能夠使用 binlog 日誌來做數據庫的備份,如果想要做數據庫備份,依然要使用我們傳統的備份方法,而 binlog 可以作爲增量備份。

視頻鏈接:
http://www.roncoo.com/course/view/658088f6e77541f5835b61800314083e

在正式開始之前,先來說一說 mysql 完整備份數據庫,以及恢復數據庫的方法備份數據庫:

首先我們來創建一個數據庫,mytest

create database mytest;

接着我們來創建一張表

use mytest;
create table t1(id int ,name varchar(20));

然後我們插入兩條數據

insert into t1 values (1,'xiaoming');
insert into t1 values (2,'xiaohong');

下面我們對 mytest 數據庫進行備份,備份到/root/bakup/

mysqldump -uroot -p -B -F -R -x --master-data=2 mytest | gzip > /root/backup/bak_$(date +%F).sql.gz

參數說明:

-B:指定數據庫

-F:刷新日誌

-R:備份存儲過程等

-x:鎖表

–master-data:在備份語句裏添加 CHANGE MASTER 語句以及 binlog 文件及位置點信息查看備份文件

這樣呢,我們就把數據做了一個完整的備份。下面來刪除數據庫,然後通過備份數據進行恢復數據庫。

gzip -d bakup_xxx.gz
mysql -uroot -p < bakup_xxx.sql

這樣我們就把數據導入到庫裏了。

繼續上面的操做,我們新增 xiaoli 和 xiaozhao 這兩條數據,並把 xiaozhao 這條記錄刪除掉。

在刪除之前,我們先來刷新 binlog 日誌,生成一個新的日誌,那麼我們之後所要操做的內容都會被記錄到新的日誌文件中。(通過前面 binlog 日誌的詳細說明我們知道,每次刷新和服務重啓的時候,都會生成一個 binlog 日誌文件。)

flush logs;
show master status;

我們注意,binlog 的文件是 0009,位置是在 154,這兩個信息很重要下面我們來做插入和刪除操作

這個時候我們應該是來查看一下 binlog 日誌的狀態,以便與我們一會來進行恢復到此狀態,但是,真正的環境中我們並不知道這個狀態,因此這裏也就不去查看這個狀態了,這個狀態的值可以通過後面查看 binlog 日誌文件來進行分析。下面我們開始誤操作:

我們來把 xiaozhao 刪除掉

這樣數據就刪除掉了,下面我們再來查看 binlog 的狀態

show master status;

這個時候我們發現我刪除操作是個錯誤的操作,要進行恢復,那麼該如何恢復呢?這個時候我們就可以通過 binlog 的 position 來進行恢復。

在進行其他的處理之前,我們建議,馬上再執行一次 flush logs,也就是讓出錯的部分就集中在這麼一個 binlog 日誌文件中。

我們來查看 0009 的 binlog 日誌。

我們看到 delete_rows 結束點是 928 這個點,起始點是在 755 這個點,我們可以把操作的這些數據刪除到我們上次備份的內容,然後通過執行 binlog 來進行恢復,當然恢復到 755 這個點之前。

比如我上次備份的是整個數據庫,我就可以把整個數據庫刪除,然後通過備份文件恢復,然後再通過 binlog 做增量恢復。這樣數據就回來了。這裏就不再進行刪庫了,我們直接演示使用 binlog 日誌恢復數據的方法

語法如下

mysqlbinlog mysql-bin.0000xx | mysql -u 用戶名 -p 密碼 數據庫名

比如我們要把所有的操作都恢復(不包括我們的刪除,我們知道刪除是在 755 點上):

mysqlbinlog mysql-bin.000009 --start-position 154 --stop-position 755 | mysql - uroot -p mytest

再來查看錶

我們發現 xiaozhao 又回來了,當然了,這裏多了一個 xiali,是因爲我之前並沒有刪除備份前的數據。當然了,我們在恢復的過程中可以選擇只恢復 xiaozhao 這麼一塊內容下面是 binlog 日誌恢復中一些常用的參數

–start-datetime:從二進制日誌中讀取指定等於時間戳或者晚於本地計算機的時間

–stop-datetime:從二進制日誌中讀取指定小於時間戳或者等於本地計算機的時間 取值

和上述一樣

–start-position:從二進制日誌中讀取指定 position 事件位置作爲開始。–stop-position:從二進制日誌中讀取指定 position 事件位置作爲事件截至

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章