共計 2226 個字符,預計需要花費 6 分鐘才能閱讀完成。
丸趣 TV 小編給大家分享一下 binlog2sql 如何實現 MySQL 誤操作的恢復,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
對于 MySQL 數據庫中的誤操作刪除數據的恢復問題,可以使用基于 MySQL 中 binlog 做到類似于閃回或者生成反向操作的 SQL 語句來實現,是 MySQL 中一個非常實用的功能。
原理不難理解,基于 MySQL 的 row 格式的 binlog 中,記錄歷史的增刪改 SQL 信息,基于此解析出來對應的 SQL 語句(回滾的話就是反向的 SQL 語句)。
在格式為 binlog 格式為 row 的日志模式下,binlog 中的內容記錄了數據庫中曾經執行的增刪改信息,都是包含了反向信息的比如執行 delete from table where pk_id = 1; 按照主鍵來刪除一條記錄
對應的 binlog 中的 sql 語句為:
delete from table where pk_id = 1 and name = lsquo;xxx rsquo; and other_column = lsquo;xxx rsquo;;
where 條件不僅僅是原始語句的 Id,而且還包括中這一行所有的字段的信息的 update 操作也同理,不但記錄了 update 操作,同時記錄了 update 記錄在更新之前的每一個字段的值。這樣就可以利用這個日志來生成反向操作信息。
如下是利用 mysqlbinlog 工具解析出來的一個 MySQL 中典型的 binlog 日志文件的部分內容,可以清楚地看到執行過的 sql 語句的信息。
說到這里,對于 MySQL 中基于 binlog 的一些應用,比如復制或者數據庫還原,其實就是重復執行某個數據庫上的歷史執行過的增刪改 SQL 語句來實現的。
題外話:MySQL 的 binlog 作用記錄事務語句的作用上,基本上等同于 SQLServer 的的事務日志。但是 SQL Server 的事務日志正的二進制內容的,微軟官方也沒有提供解析的方法,而 MySQL 中完全可以通過 mysqlbinlog 來解析出來這個日志中的內容。
如下是通過 MySQL 自帶的 mysqlbinlog 工具解析出來的 binlog 日志文件中的信息,可以看到其中的 SQL 語句信息。
知道了 binlog 中的內容,就可以基于這個 binlog 來實現各種實用的功能,典型的就是誤刪數據的還原操作,比如蘇家小蘿卜同學就自己用 Python 搞定這個解析功能。
類似功能比較知名的還有大眾點評網 DBA 自己寫的 binlog2sql 工具,也是久聞大名,終于有機會嘗試了。
binlog2sql 需要語句 pip 安裝,所以需要先安裝 pip
pip 安裝參考:
https://www.cnblogs.com/technologylife/p/5870576.html
binlog2sql 下載以及安裝:
https://github.com/danfengcao/binlog2sql
完成了 binlog2sql 之后,就可以使用它來實現數據的還原操作了,如下模擬一個誤操作的恢復
在開啟了 binlog,日志格式為 row 的測試數據下,對于測試表 test_01,分別執行以下 sql 語句:
insert into test_01 values (1, aaa insert into test_01 values (2, bbb insert into test_01 values (3, vvv -- 以下誤操作,更新了全部數據 update test_01 set name = xxx
通過 show master logs; 找到當前的 binlog 文件,對應的 sql 語句的執行就存儲在當前這個 binlog 中,binlog2sql 的目標就是這個文件
參考下圖,可以發現
執行:python binlog2sql.py -h227.0.0.1 -P3306 -uroot -p rsquo;root rsquo; -ddb01 -t test_01 ndash;start-file= rsquo;binlog.000021 prime;(更多參數以及使用方式參考下文鏈接),通過 binlog2sql 來解析當前的 binlog 文件,解析出來的 SQL 語句就是正常 SQL 語句的執行(insert insert insert update(3 行記錄))
執行:python binlog2sql.py -h227.0.0.1 -P3306 -uroot -p rsquo;root rsquo; -ddb01 -t test_01 ndash;start-file= rsquo;binlog.000021 prime; -B,通過 - B 參數生成反向的操作信息
加參數 - B 解析出來的 SQL 語句與上面的 SQL 語句剛好相反,包括順序,也即以倒序的方式生成反向的操作
原始操作是 insert insert insert update update update,反向的操作就是 upfate update update delete delete delete,這樣一來,可以根據具體的情況,截取生成的反向的 sql 語句,進行誤操作的還原。
以上操作注意安裝的 binlog2sql 的路徑問題,如果路徑不對,找不到 binlog2sql.py,上述命令也就無法執行
以上是“binlog2sql 如何實現 MySQL 誤操作的恢復”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!