使用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
- MySQL 透過 binlog 恢復資料MySql
- mysql 利用binlog增量備份、恢復MySql
- 05、MySQL Case-MySQL binlog誤清除恢復MySql
- 使用binlog2sql工具來恢復資料庫SQL資料庫
- Mysql效能壓測、Binlog恢復資料MySql
- 利用binlog日誌恢復mysql資料MySql
- 【Mysql】如何透過binlog恢復資料MySql
- 通過binlog恢復mysql資料庫MySql資料庫
- MySQL--binlog日誌恢復資料MySql
- MySQL基於binlog主從複製配置MySql
- 基於mysql-binlog的恢復實驗MySql
- MySQL通過Binlog恢復刪除的表MySql
- MySQL併發複製系列一:binlog組提交MySql
- Mysql5.6主從複製-基於binlogMySql
- 使用binlog2sql恢復資料SQL
- MySQL中的binlog相關命令和恢復技巧MySql
- MySQL 主從複製搭建,基於日誌(binlog)MySql
- mysql GTID主從複製故障後不停機恢復同步流程MySql
- MySQL使用mysqldump+binlog完整恢復被刪除的資料庫(轉)MySql資料庫
- MySQL閃回技術之binlog2sql恢復binlog中的SQLMySql
- MySQL中使用undrop來恢復drop的表(上)MySql
- 通過binlog恢復mysql備份之前的資料MySql
- MySQL 複製全解析 Part 11 使用xtrabackup建立MySQL複製MySql
- 使用blockhole儲存引擎過濾複製的binlogBloC儲存引擎
- 通過MySQL relaylog + SQL_Thread 增量恢復binlogMySqlthread
- Linux下MySQL主從複製(Binlog)的部署過程LinuxMySql
- MySQL雙主複製環境中BINLOG日誌的解析~MySql
- 【MySQL】主從GTID複製修復MySql
- 利用rman恢復來複制資料庫資料庫
- Mysql之binlog日誌說明及利用binlog日誌恢復資料操作記錄MySql
- MySQL資料庫遭到攻擊篡改---使用備份和binlog進行資料恢復MySql資料庫資料恢復
- MySQL禁用恢復外來鍵約束MySql
- MySQL GTID複製錯誤修復演示MySql
- MySQL 5.7.9多源複製報錯修復MySql
- 02 . MongoDB複製集,分片集,備份與恢復MongoDB
- 【Mongo】mongo分片加複製集的備份恢復Go