刪庫了不用跑路!binlog恢復資料實操

救苦救难韩天尊發表於2024-08-07

各位道友大家好呀!

想必道友們或多或少都聽說過MySQL的binlog的作用,它記錄了資料庫整個的生命週期,可用於恢復資料或者從庫同步資料。

那麼如果發生了資料庫誤刪,具體該怎樣恢復資料呢?

下面就以一個例子來給道友們演示一下,讓我們開始吧!do it!

資料備份

首先,資料庫要定時進行備份,因為如果需要恢復資料,可以縮小binlog執行範圍

mysqldump -uroot -p --master-data=2 --single-transaction -A > /www/server/data/fanrencode-back.sql

引數master-data為2可以記錄更多的細節,比如位置資訊,方便binlog --start-position定位

binlog恢復資料

模擬誤刪操作

首先,新增一條測試資料,然後對庫進行備份


然後我們又新增了資料,但是不小心把表給清空了

那麼我們該怎麼恢復資料呢?

有條件的話先在測試庫裡執行,沒問題再在生產執行。

恢復資料

1.執行備份的檔案

可以看到資料已經恢復成mysqldump備份時的資料了

2.執行binlog

檢視mysqldump備份的檔案的結束位置,如圖可知是1969

注意這個MASTER_LOG_POS在檔案的最上面,用PgUp翻到最上面即可。

然後查詢mysql-bin.000011這個binlog檔案,直接vim檢視的話會亂碼,所以我們把檔案以明文的形式(-vv)輸出到另一個test.binlog檔案

/www/server/mysql/bin/mysqlbinlog mysql-bin.000011 -vv > test.binlog

如果提示unknown variable 'default-character-set=utf8'.錯誤,則需要在mysqlbinlog 後面加上--no-defaults引數

然後再vim檢視就不亂碼了,由圖可知truncate操作的位置在902120

然後執行恢復操作

/www/server/mysql/bin/mysqlbinlog  --start-position=1969 --stop-position=902120 /www/server/data/mysql-bin.000011 | mysql -uroot -p

這樣就完成了資料的恢復

噹噹,是不是還挺簡單的,各位道友實操起來若有參差歡迎給小道留言~

相關文章