1. 程式人生 > >針對MYSQL delete、update、insert語句誤操作時的恢復辦法

針對MYSQL delete、update、insert語句誤操作時的恢復辦法

mysql 針對MYSQL delete、update、insert語句誤操作(如update忘記加where條件)

目前還沒有特別好的辦法進行恢復,主要是根據binlog日誌檔案進行恢復,網上也有

很多的部落格說明這些操作步驟,目前總結起來快速方便的辦法是:

利用淘寶的彭立勳開發出的一個flashback外掛進行恢復,之前的外掛版本只針對MySQL-5.5.18,

無法用於目前主流的5.6版本的。後來平民軟體將該功能移植到5.6版本上,

讓相關人員對資料庫有更強的掌控能力。

相關的部落格:http://www.cnblogs.com/youge-OneSQL/p/5249736.html

相關的部落格:

http://blog.csdn.net/wyzxg/article/details/9454375

0. MYSQL可恢復的前提

(1)開啟binlog

(2)binlog_format的格式採用 ROW 格式,

          ROW 方式會產生大量的binlog資訊,引數binlog_row_image = MINIMAL 時可適當優化。

1. 下載 mysql5.6  flashback外掛(二進位制版本,無需安裝)

下載地址:http://pan.baidu.com/s/1nvGOOIl 

最新更新的日期: 2016/4/8

2. 將二進位制外掛檔案拷貝到  原mysqlbinlog程式的目錄中


 下載的外掛程式檔案重新命名 mysqlbinlogFB

(保證和mysqlbinlog不重名即可)


下載下來的外掛程式檔案和之前的mysqlbinlog 工具一樣使用,只是引數多了一個 -B引數


3. 模擬一下 delete 沒有加 where條件的情況



 4. 找到剛才delete 操作在binlog日誌檔案中的開始和結束位置點

 這裡主要看如何使用mysqlbinlog工具了,例如:產生delete誤操作的時間點大概是在“2016-07-06 21:41:00”左右,我們檢視binlog日誌檔案時指定開始時間點為“2016-07-06 21:40:00”並且匹配表名稱“t_name”,如果打印出的binlog日誌比較多時,可只看前20行和後20行即可。

20

行:

[[email protected] data]# mysqlbinlogFB -v --base64-output=decode-rows --start-datetime='2016-07-06 21:40:00'  mysql-bin.000021 |grep -i 't_name' -C20 | head -n 20

20行:

[[email protected] data]# mysqlbinlogFB -v --base64-output=decode-rows --start-datetime='2016-07-06 21:40:00'  mysql-bin.000021 |grep -i 't_name' -C20 | tail-n 20

由於是測試的表資料,binlog資訊量比較少,所以直接列印2016-07-06 21:40:00時間點之後的全部binglog資訊,最後找出的位置起始結束點資訊如下:

[[email protected] data]# mysqlbinlogFB -v --base64-output=decode-rows --start-datetime='2016-07-06 21:40:00'  mysql-bin.000021


 注意到兩個 位置點  1377 和  1567,檢視binlog中的日誌資訊確實是剛才誤操作的delete 語句。

 在指定--start-position時,需要注意包含table_map_event的位置,否則工具無法找到相關表的元資料資訊。

 5. 採用myslqbinlogFB 工具進行恢復

[[email protected] data]# mysqlbinlogFB-B-v --start-position=1377 --stop-position=1567   mysql-bin.000021| mysql -uroot -proot123 mytest

採用上面的命令即可 將剛才的delete的 binlog資訊反轉成insert語句插入到 mytest資料庫中的t_name表中。

最後檢視 t_name表:


同理,對於update,insert 語句恢復,一樣的步驟操作。