MySQL通過binlog日誌回滾數據

一、數據庫在進行數據更改操作時,會出現數據誤操作導致數據異常的情況,所以數據安全是重中至重,對於數據庫服務,必須開啓binlog日誌服務,保證數據的安全,可逆回滾。
二進制日誌的格式有三種形式分別爲ROW、Statement以及MiXED
1、STATMENT模式:基於SQL語句的複製(statement-based replication, SBR),每一條會修改數據的sql語句會記錄到binlog中。

優點:不需要記錄每一條SQL語句與每行的數據變化,這樣子binlog的日誌也會比較少,減少了磁盤IO,提高性能。

缺點:在某些情況下會導致master-slave中的數據不一致(如sleep()函數, last_insert_id(),以及user-defined functions(udf)等會出現問題)

2、基於行的複製(row-based replication, RBR):不記錄每一條SQL語句的上下文信息,僅需記錄哪條數據被修改了,修改成了什麼樣子了。

優點:不會出現某些特定情況下的存儲過程、或function、或trigger的調用和觸發無法被正確複製的問題。

缺點:會產生大量的日誌,尤其是alter table的時候會讓日誌暴漲。

3、混合模式複製(mixed-based replication, MBR):以上兩種模式的混合使用,一般的複製使用STATEMENT模式保存binlog,對於STATEMENT模式無法複製的操作使用ROW模式保存binlog,MySQL會根據執行的SQL語句選擇日誌保存方式。
這裏我這都我的數據庫日誌使用ROW格式。
MySQL通過binlog日誌回滾數據
登錄數據查看數據庫的數據信息:
MySQL通過binlog日誌回滾數據
覈實相關的binlog日誌的報錯路徑以及日誌是否開啓。show variables like "log_bin%";
MySQL通過binlog日誌回滾數據
覈實最新的binlog日誌信息:show master logs; show binary logs; show master status;
MySQL通過binlog日誌回滾數據

     二、下面進行相關的數據恢復實踐:

創建測試數據庫:
MySQL通過binlog日誌回滾數據
創建數據表:相關的數據是下載網絡資源的數據。
MySQL通過binlog日誌回滾數據
將數據刪除:
MySQL通過binlog日誌回滾數據
三、通過binlog日誌覈實刪除以及創建數據的時間點或者pos點。
我這裏演示通過pos點進行數據恢復。
通過mysqlbinlog 命令覈實最近的binlog日誌名稱進行日誌查看。覈實具體的時間節點。
MySQL通過binlog日誌回滾數據
MySQL通過binlog日誌回滾數據
確認時間點後,進行數據回滾,相關命令還是通過mysqlbinlog進行數據回滾操作。
mysqlbinlog --no-defaults --start-position="239" --stop-position="736" /var/lib/mysql/ON.000015 | mysql -uroot -p
參數說明,--start-position #開始的pos時間點。
--stop-position #結束的pos時間
如果是通過日期時間回滾的命令如下:

     mysqlbinlog --start-datetime '2019-07-02 21:42:36' --stop-datetime '2019-07-02  21:57:42' /var/lib/mysql/ON.000013 | mysql -uroot -p

執行回滾後會出現如下的信息,回車確認,我這裏數據比較少,回滾時間較快。
MySQL通過binlog日誌回滾數據

再次覈實相關的數據信息。
MySQL通過binlog日誌回滾數據

注:mysqlbinlog相關的命令參數可以通過mysqlbinlog --help 覈實查看。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章