mysql?binlog?回滾示例解析
mysqlbinlog
嚴格來說mysqlbinlog 不能算回滾,他只是將過去的數(shù)據(jù)修改記錄 重新執(zhí)行一遍,但是從結(jié)果上來看,他也算把數(shù)據(jù)恢復(fù)到任意時間點了,舉例來說在昨天的某一刻誤刪除了一條數(shù)據(jù),導(dǎo)致其他數(shù)據(jù)存儲都是異常,今天才發(fā)現(xiàn),現(xiàn)在我希望回滾到那一刻,那么我只要在binlog中找到昨天刪除時的那條語句,然后重新執(zhí)行之前的所有binlog文件,當(dāng)然假設(shè)你有備份,那么也可以使用備份文件+備份后binlog文件進行恢復(fù)。現(xiàn)在我來模擬這個例子,我將執(zhí)行以下步驟。
步驟1:清空除了系統(tǒng)自帶的表之外的其他表 后備份數(shù)據(jù)(模擬數(shù)據(jù)庫處于初始狀態(tài))
步驟2:創(chuàng)建數(shù)據(jù)庫rollbackDatabase,創(chuàng)建表rollbackTable,簡單起見就定義個字段name,插入5條數(shù)據(jù)(test1,test2,test3,test4,test5)
步驟3:刷新binlog(模擬機器重啟)
步驟4:修改其中的3條數(shù)據(jù)(test1,test2,test3)->(test1_update,test2_update,test3_update),刪除test2_update,test3_update(昨天誤刪除了test3_update)
步驟5: 增加10條數(shù)據(jù)(test6-test10)(今天發(fā)現(xiàn)問題)
步驟6:刷新binlog(這里只是避免執(zhí)行恢復(fù)時,讓修改記錄寫到另外的binlog中,避免日志太多看不清)
經(jīng)過以上6個步驟,數(shù)據(jù)庫內(nèi)容以及日志文件已經(jīng)生成好,其中back_20220806_192900.sql 是備份好的文件,binlog.000011備份后的binlog,binlog.000012是步驟3生成的binlog,binlog,binlog.000013是步驟6生成的。
恢復(fù)
現(xiàn)在我們開始找回昨天誤刪除“test3_update”之前的數(shù)據(jù),很明顯“誤刪除”操作應(yīng)該是被記錄在binlog.000012中,(如果不是模擬,我們應(yīng)該查看binlog文件的創(chuàng)建時間,結(jié)合誤刪除的時間,就能知道是在哪個binlog記錄了誤操作)知道的誤刪除的binlog,我們就可以去定位“誤刪除”的事務(wù)所在位置。
mysqlbinlog --verbose binlog.000012 | grep -C 15 "DELETE"
查看指定時間范圍的事件
mysqlbinlog --start-datetime="2020-03-11 20:05:00" --stop-datetime="2020-03-11 20:08:00" --verbose binlog.0000010
要恢復(fù)只需要執(zhí)行binlog.000011全部記錄與binlog.000012中部分記錄就可以了,在執(zhí)行恢復(fù)操作(在這之前需要刪除創(chuàng)建的數(shù)據(jù)庫)
mysqlbinlog binlog.000011 |mysql -uroot -p
mysqlbinlog --stop-position=1578 binlog.000012 |mysql -uroot -p
發(fā)現(xiàn)結(jié)果與預(yù)想的一樣
查看指定時間范圍的事件
mysqlbinlog --start-datetime="2020-03-11 20:05:00" --stop-datetime="2020-03-11 20:08:00" --verbose binlog.0000010
工具binlog2sql
到此這篇關(guān)于mysql binlog 回滾的文章就介紹到這了,更多相關(guān)mysql binlog 回滾內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql查詢時offset過大影響性能的原因和優(yōu)化詳解
這篇文章主要給大家介紹了關(guān)于mysql查詢時offset過大影響性能的原因和優(yōu)化的相關(guān)資料,并在文末跟大家分享了MYSQL中l(wèi)imit,offset的區(qū)別,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-06-06MySQL中ONLY_FULL_GROUP_BY的使用小結(jié)
ONLY_FULL_GROUP_BY是MySQL中的一個重要SQL模式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-12-12MySQL之select in 子查詢優(yōu)化的實現(xiàn)
這篇文章主要介紹了MySQL之select in 子查詢優(yōu)化的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09mysql如何處理varchar與nvarchar類型中的特殊字符
這篇文章主要介紹了mysql如何處理varchar與nvarchar類型中的特殊字符,需要的朋友可以參考下2014-12-12