使用MySQL自身複製來恢復binlog
在MySQL手冊中一直是推薦使用mysqlbinlog工具來實現指定時間點的資料恢復,事實上,這是一個經常”讓人鬱悶”的辦法。更好的辦法是,使用MySQL內部複製執行緒中的SQL Thread來做恢復。
這個idea來自Lazydba同學;在Google稍作搜尋,在Xaprb上Baron Schwartz也很早提到了使用類似的方法來恢復binlog,在那篇討論中,還可以看到Jeremy Cole也提到:使用MySQL手冊中推薦的方法是困難重重的,而且mysqlbinlog這個辦法從邏輯上來說也是一個錯誤–因為這樣MySQL不得不在兩個不同的地方實現一套相同的邏輯,最終難免會出錯。使用mysqlbinlog來恢復,你可能會需要以下“讓人鬱悶”的問題:
(*) Max_allowed_packet問題
(*) 惱人的Blob/Binary/text欄位問題
(*) 特殊字元的轉義問題
(*) 沒有"斷點恢復":執行出錯後,沒有足夠的報錯,也很難從失敗的地方繼續恢復
1. 如何操作
本文不打算寫一個step by step的文件,只介紹主要的思路和粗略的操作步驟。
1.1 將binlog作為relay log來執行
優點:實施簡單;缺點:需要關閉一次資料庫(不確定不關閉資料庫行不行);
思路:直接將要恢復的binlog拷貝到relay log目錄,並修改slave-info相關的檔案,讓MySQL把binlog當做relay log來執行
簡單的操作步驟:
* 關閉當前例項
* 將binlog拷貝到對應的relay log目錄(datadir或者relay-log引數指定的目錄)
* 開啟relay-log-info-file引數指定的relay-log.info檔案(預設是datadir目錄下的relay-log.info檔案),修改檔案前面兩行。
這兩行的意義分別是:當前執行的relay log檔案;當前執行到relay log檔案的位置(position)
* 開啟relay-log-index檔案(由引數--relay-log-index,預設是資料目錄下的host_name-relay-bin.index)將需要恢復的binlog檔案全路徑列表存在該檔案中
* 啟動資料庫,並start slave io_thread
1.2 從專門構建的binlog server上拉binlog
這個方法,無需啟動資料庫,但是需要重新啟動一個全新的例項,將binlog拷貝到該例項中,這裡稱這個例項為binlog server。然後把需要恢復的例項複製指向這個binlog server。這裡需要做的是,將日誌拷貝到binlog server對應目錄下,並修改對應的master-info檔案,使得備庫能夠dump到這些binlog檔案。
2. 其他需要注意的事項
* 配置檔案中建議加上skip-slave-start,以免在不需要時候slave執行緒自己開始執行了
* start slave的時候,可以通過start slave until的方式,控制slave執行到的位點
* slave執行的其實位點,則通過relay-log.info或者change master to來指定
Good Luck.
相關文章
- MySQL 透過 binlog 恢復資料MySql
- MySQL 通過 binlog 恢復資料MySql
- 05、MySQL Case-MySQL binlog誤清除恢復MySql
- MySQL 組複製故障恢復的有效策略MySql
- 使用binlog2sql工具來恢復資料庫SQL資料庫
- 利用binlog日誌恢復mysql資料MySql
- 【Mysql】如何透過binlog恢復資料MySql
- Mysql效能壓測、Binlog恢復資料MySql
- 透過延時從庫+binlog複製,恢復誤運算元據
- 使用binlog2sql恢復資料SQL
- MySQL中的binlog相關命令和恢復技巧MySql
- MySQL閃回技術之binlog2sql恢復binlog中的SQLMySql
- MySQL使用mysqldump+binlog完整恢復被刪除的資料庫(轉)MySql資料庫
- mysql GTID主從複製故障後不停機恢復同步流程MySql
- Linux下MySQL主從複製(Binlog)的部署過程LinuxMySql
- MySQL 複製全解析 Part 11 使用xtrabackup建立MySQL複製MySql
- mysql 誤刪除表內資料,透過binlog日誌恢復MySql
- 教你自動恢復MySQL資料庫的日誌檔案(binlog)MySql資料庫
- MySQL GTID複製錯誤修復演示MySql
- MySQL 主從複製,常見的binlog錯誤及解決方法MySql
- 資料庫資料恢復—無備份,binlog未開啟的Mysql資料庫資料恢復案例資料庫資料恢復MySql
- 【Mongo】mongo分片加複製集的備份恢復Go
- 02 . MongoDB複製集,分片集,備份與恢復MongoDB
- MySQL GTID複製中斷修復過程MySql
- mysql複製那點事(2)-binlog組提交原始碼分析和實現MySql原始碼
- mysql point in time recovery using sql_thread SQL_Thread增量恢復binlog 要點MySqlthread
- MySQL binlog基於時間點恢復資料失敗是什麼鬼?MySql
- Linux上透過binlog檔案恢復mysql資料庫詳細步驟LinuxMySql資料庫
- MySQL複製MySql
- 使用 “恢復模式” 或 “DFU 模式” 來更新和恢復 iOS 韌體模式iOS
- mysql複製--主從複製配置MySql
- 刪庫了不用跑路!binlog恢復資料實操
- MySQL 8 複製(三)——延遲複製與部分複製MySql
- MySQL主從複製之GTID複製MySql
- MySQL 8 複製(一)——非同步複製MySql非同步
- MySQL 8 複製(二)——半同步複製MySql
- MySQL 8 複製(四)——GTID與複製MySql
- MySQL 8 複製(五)——配置GTID複製MySql
- Mysql備份恢復MySql