用mysqlbinlog恢復MySQL資料庫

2021-08-27 06:54:32 字數 2022 閱讀 4892

如果mysql

伺服器 啟用了二進位制日誌, 你可以使用mysql binlog工具來恢復從指定的時間點開始 (例如, 從你最後一次備份)直到現在或另乙個指定的時間點的資料。 關於啟用二進位制日誌的資訊,參見5.11.3節,「二進位制日誌」。 對於 mysql binlog的詳細資訊,參見mysql手冊8.6節,「mysqlbinlog:用於處理二進位制日誌檔案的實用工具」。

要想從二進位制日誌恢復資料,你需要知道當前二進位制日誌檔案的路徑和檔名。一般可以從選項檔案(即my.cnf or my.ini,取決於你的系統)中找到路徑。如果未包含在選項檔案中,當伺服器 啟動時,可以在命令列中以選項的形式給出。啟用二進位制日誌的選項為-- log-bin。要想確定當前的二進位制日誌檔案的檔名,輸入下面的mysql 語句:

show binlog events g

你還可以從命令列輸入下面的內容:

mysql --user=root -pmy_pwd -e 'show binlog events g'

將密碼my_pwd替換為伺服器的root密碼。

1. 指定恢復時間

對於mysql 4.1.4,可以在mysqlbinlog語句中通過--start-date和--stop-date選項指定datetime格式的起止時間。舉例說 明,假設在今天上午10:00(今天是2023年4月20日),執行sql語句來刪除乙個大表。要想恢復表和資料,你可以恢復前晚上的備份,並輸入:

mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456

| mysql -u root -pmypwd

該命令將恢復截止到在--stop-date選項中以datetime格式給出的日期和時間的所有資料。如果你沒有檢測到幾個小時後輸入的錯誤的sql語句,可能你想要恢復後面發生的活動。根據這些,你可以用起使日期和時間再次執行mysqlbinlog:

mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456

| mysql -u root -pmypwd

在該行中,從上午10:01登入的sql語句將執行。組合執行前夜的轉儲檔案和mysqlbinlog的兩行可以將所有資料恢復 到上午10:00前一秒鐘。你應檢查日誌以確保時間確切。下一節介紹如何實現。

2. 指定恢復位置

也可以不指定日期和時間,而使用mysqlbinlog的選項--start-position和--stop-position來指定日誌位置。它們的 作用與起止日選項相同,不同的是給出了從日誌起的位置號。使用日誌位置是更準確的恢復方法,特別是當由於破壞性sql語句同時發生許多事務的時候。要想確 定位置號,可以執行mysqlbinlog尋找執行了不期望的事務的時間範圍,但應將結果重新指向文字檔案以便進行檢查。操作方法為:

mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00"

/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql

該命令將在/tmp目錄建立小的文字檔案,將顯示執行了錯誤的sql語句時的sql語句。你可以用文字編輯器開啟該檔案,尋找你不要想重複的語句。如果二 進製日誌中的位置號用於停止和繼續恢復操作,應進行注釋。用log_pos加乙個數字來標記位置。使用位置號恢復了以前的備份檔案後,你應從命令列輸入下 面內容:

mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456

| mysql -u root -pmypwd

mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456

| mysql -u root -pmypwd

上面的第1行將恢復到停止位置為止的所有事務。下一行將恢復從給定的起始位置直到二進位制日誌結束的所有事務。因為mysqlbinlog的輸出包括每個sql語句記錄之前的set timestamp語句,恢復的資料和相關mysql日誌將反應事務執行的原時間。

mysql資料恢復 mysqlbinlog

恢復資料的關鍵是資料庫開啟了log bin window下my.ini裡 log bin mysql bin 日誌檔案的字首,可修改,如 mysql bin.000001 然後預設放在資料庫根目錄的data資料夾裡 如果誤刪了資料庫,可以用之前備份的資料庫 如2014 05 12 doc命令列下用m...

MySQL binlog實現增量恢復

mysql實時增量備份,採用binlog日誌的好處 掌控所有更改操作,必要時可用於恢復資料 資料庫主從複製的必要條件 root localhost vim etc my.cnf mysqld log bin mysql bin 啟用二進位制日誌,並指定字首 root dbsvr1 service m...

mysqlbinlog 恢復mysql資料

最近做了乙個很危險的操作,update mysql的時候沒有加where條件,導致資料全更改了 後來通過備份恢復了 大家要引以為戒,千萬慎重。於是,我就研究了一下通過mysqlbinlog恢復資料,以下為實際操作步驟。mysql版本5.7.24 關鍵命令 mysqlbinlog stop posit...