MySQL數據恢復工具binlog2sql

2021-01-08 偏執的IT工匠

binlog2sql是一個開源的Python開發的MySQL Binlog解析工具,能夠將Binlog解析為原始的SQL,也支持將Binlog解析為回滾的SQL,以便做數據恢復。

主要功能:

將Binlog解析為SQL語句將Binlog解析為回滾的SQL語句開源地址:

github.com/danfengcao/binlog2sql

支持的版本:

Python 2.7, 3.4+MySQL 5.6, 5.7外部依賴包:

下載源碼,打開源碼目錄中的requirements.txt文件,即可看到依賴的外部包,如下:

PyMySQL==0.7.11wheel==0.29.0mysql-replication==0.13通過執行如下命令,安裝外部依賴包。

shell> pip install -r requirements.txt

MySQL Server的配置:

MySQL的配置,必須滿足以下要求,才能正常使用binlog2sql工具。開啟binlog,binlog格式必須為ROW,且binlog_row_image必須為full。

binlog2sql參數選項:

mysql連接選項,與mysql客戶端的選項一致

-h host-P port-u user-p password解析模式

--stop-never 持續解析binlog。可選。默認False,同步至執行命令時最新的binlog位置。-K, --no-primary-key 對INSERT語句去除主鍵。可選。默認False-B, --flashback 生成回滾SQL,可解析大文件,不受內存限制。可選。默認False。與stop-never或no-primary-key不能同時添加。--back-interval -B模式下,每列印一千行回滾SQL,加一句SLEEP多少秒,如不想加SLEEP,請設為0。可選。默認1.0。解析範圍控制

--start-file 起始解析文件,只需文件名,無需全路徑 。必須。--start-position/--start-pos 起始解析位置。可選。默認為start-file的起始位置。--stop-file/--end-file 終止解析文件。可選。默認為start-file同一個文件。若解析模式為stop-never,此選項失效。--stop-position/--end-pos 終止解析位置。可選。默認為stop-file的最末位置;若解析模式為stop-never,此選項失效。--start-datetime 起始解析時間,格式'%Y-%m-%d %H:%M:%S'。可選。默認不過濾。--stop-datetime 終止解析時間,格式'%Y-%m-%d %H:%M:%S'。可選。默認不過濾。對象過濾

-d, --databases 只解析目標db的sql,多個庫用空格隔開,如-d db1 db2。可選。默認為空。-t, --tables 只解析目標table的sql,多張表用空格隔開,如-t tbl1 tbl2。可選。默認為空。--only-dml 只解析dml,忽略ddl。可選。默認False。--sql-type 只解析指定類型,支持INSERT, UPDATE, DELETE。多個類型用空格隔開,如--sql-type INSERT DELETE。可選。默認為增刪改都解析。用了此參數但沒填任何類型,則三者都不解析。使用案例:

案例一:解析binlog,生成正向的sql語句。

在沒有加 --only-dml 參數的情況下,會連ddl語句也解析出來,加上 --only-dml 參數,看到只解析dml語句。

案例二:解析binlog,生成回滾的sql語句。

回滾sql是正向sql的反轉,insert 100, insert 1, 反轉後,變為 delete 1, delete 100。

總結:

binlog2sql 安裝使用方便,源碼文件不多,也不大,但是功能非常強大。需要注意的是,在使用binlog2sql時,mysql server必須開啟,離線模式下不能解析。

相關焦點

  • MySQL基於binlog實現數據增量恢復實踐
    mysql基於binlog有兩種方式實現數據的恢復:基於binlog時間點的數據恢復;基於binlog事件位置數據恢復;下面我們就構建一個mysql資料庫環境,模擬對數據進行了誤操作,然後基於binlog的事件位置實現增量恢復數據。
  • 使用binlog日誌恢復MySQL資料庫刪除數據的方法
    binlog日誌包括兩類文件:1)二進位日誌索引文件(文件名後綴為.index):用於記錄所有的二進位文件;2)二進位日誌文件(文件名後綴為.00000*):記錄資料庫所有的DDL和DML(除了數據查詢語句select)語句事件。binlog日誌對於mysql資料庫來說是十分重要的。在數據丟失的緊急情況下,可以嘗試用binlog日誌功能進行數據恢復操作。
  • 實戰 | MySQL數據備份、恢復
    為了能更靈活的將數據恢復到指定的時間點,使用 binlog 作為增量備份。1.2.如果真實發生了,可以參考以下方式恢復:將 binlog 和上一次的備份結果拷貝到測試機器,將資料庫恢復到drop語句之前的一次事務狀態,並通過mysqldump將誤刪除的資料庫或者數據表導出,並導入生產環境的主庫。1.3.2.
  • MySQL資料庫的mysqldump完全備份、binlog的增量備份與還原
    MySQL資料庫的mysqldump完全備份、binlog的增量備份與還原一、 備份的目的:做災難性恢復:對損壞的書籍進行恢復和還原需求改變:因需求改變而需要把數據還原到改變以前b) Mysqldump的備份過程屬於邏輯備份,備份速度、恢復速度與物理備份工具相比較慢,而且mysqldump備份的過程是串行化的,不會並行的進行備份,當數據量較大時,一般不會使用mysqldump進行備份,因為效率較低。
  • 淺談使用Binlog實現MySQL增量備份
    首先我先闡述一下,他的基本原理,就是定時製作基線,然後定時更新binlog,形成增量數據文件,然後在必要的時候進行恢復,追溯。1, 按天備份周一 00:00 全備數據周二 00:00 全備數據26_01.sql.gz26_02.sql.gz周一增備周二增備binlog.000022binlog.000023binlog.000024......
  • MySQL 數據恢復
    找到當天的全量備份數據恢復, 然後在這基礎上進行增量恢復即可恢復到某個特定的時間點.增量備份就是 mysql 的binlog了.show binlog events in &39; 查看日誌文件內容binlog相關配置: binlog 日誌文件前綴log_bin_basename=/var/lib/mysql/binlog 文件過期時間, 過期文件會自動刪除expire_logs_days=734;2020
  • 教你一招MySQL 數據恢復
    如果沒有備份文件,那麼刪掉庫表後就真的刪掉了,lsof 中還有記錄的話,有可能恢復一部分文件。但若剛好資料庫沒有打開這個表文件,那就只能跑路了。如果沒有開啟 binlog,那麼恢復數據後,從備份時間點開始的數據都沒了。如果 binlog 格式不為 row,那麼在誤操作數據後就沒有辦法做閃回操作,只能老老實實地走備份恢復流程。
  • 帶你解析MySQL binlog
    binlog主要有兩個應用場景,一是用於複製,master把它的二進位日誌傳遞給slaves來達到master-slave數據一致的目的。二是用於數據恢復,例如還原備份後,可以重新執行備份後新產生的binlog,使得資料庫保持最新狀態。
  • 手把手教你MySQL數據恢復
    如果沒有備份文件,那麼刪掉庫表後就真的刪掉了,lsof 中還有記錄的話,有可能恢復一部分文件。但若剛好資料庫沒有打開這個表文件,那就只能跑路了。如果沒有開啟 binlog,那麼恢復數據後,從備份時間點開始的數據都沒了。如果 binlog 格式不為 row,那麼在誤操作數據後就沒有辦法做閃回操作,只能老老實實地走備份恢復流程。
  • MySQL發生全表更新後如何快速恢復數據
    ;恢復數據效率不高;通過查閱資料和閱讀mysql官方文檔,還有一種應該算比較高效和可靠的方式來恢復全表更新後的數據。這種方法同樣還是基於mysql的binlog和sed命令可以提取出當時執行全表更新的sql,然後對update的sql語句進行逆向操作,將更新後的數據再更新回之前的數據。下面我們就通過一個例子來研究下,這種方法如何到達快速恢復數據的目的。同時把恢復數據的過程記錄下來,方便以後遇到類似問題可以查閱參考,快速解決問題,提高工作效率。
  • 電子數據取證之MySQL資料庫刪除數據的恢復指南
    binlog日誌包括兩類文件:1)二進位日誌索引文件(文件名後綴為.index):用於記錄所有的二進位文件;2)二進位日誌文件(文件名後綴為.00000*):記錄資料庫所有的DDL和DML(除了數據查詢語句select)語句事件。binlog日誌對於mysql資料庫來說是十分重要的。在數據丟失的緊急情況下,可以嘗試用binlog日誌功能進行數據恢復操作。
  • 技術分享 | MySQL binlog 日誌解析
    解析由於 binlog 是二進位文件,所以無法直接使用文本打開,需要使用對應的解析工具才可以查看具體內容。2.2 mysqlbinlogmysqlbinlog 是 mysql 原生自帶的 binlog 解析工具,速度快而且可以配合管道命令過濾數據,適合解析大量 binlog 文件,建議使用。
  • mysql 基於binlog的主從複製
    /usr/local/mysql/var/默認二進位日誌備份存放目錄/root/databases_[日期]分別打開主、從伺服器的my.cnf文件vi /etc/my.cnf不存在則添加binlog_format=mixedserver-id = 2expire_logs_days = 10
  • MySQL的 binlog 和 relay-log 完全詳解
    binlog作用binlog的主要作用是記錄資料庫中表的更改,它只記錄改變數據的sql,不改變數據的sql不會寫入,比如select語句一般不會被記錄,因為他們不會對數據產生任何改動。binlog另外,也可以使用mysqlbinlog工具來查看binlog的內容:show variables like &39;; 查看binlog列表show master status
  • MySQL - binlog日誌簡介及設置
    前言mysql-binlog是MySQL資料庫的二進位日誌,用於記錄用戶對資料庫操作的SQL語句((除了數據查詢語句)信息。可以使用mysqlbin命令查看二進位日誌的內容。MySQL binlog格式binlog的格式也有三種:STATEMENT、ROW、MIXED 。1、STATMENT模式:基於SQL語句的複製(statement-based replication, SBR),每一條會修改數據的sql語句會記錄到binlog中。
  • Mysql數據誤刪除快速回滾
    傳統的方法會先恢復mysql備份,再去用mysqlbinlog抽取指定時間點的日誌,再恢復,這樣的操作比較耗時,容易出錯,那有沒有一種工具可以快速把誤刪除的操作SQL逆過來,然後重新插入誤刪除的數據呢?binlog2sql,就是一個很好的應用,它可以從MySQL binlog解析出SQL,根據不同選項,你可以得到原始SQL、回滾SQL、去除主鍵的INSERT SQL等。
  • MySQL中的binlog和relay-log結構完全詳解
    今天我們來深挖一下mysql的複製機制到底有哪一些,以及binlog和relay-log的結構到底是什麼樣子的。binlog作用binlog的主要作用是記錄資料庫中表的更改,它只記錄改變數據的sql,不改變數據的sql不會寫入,比如select語句一般不會被記錄,因為他們不會對數據產生任何改動。
  • Python如何對MySQL的誤操作快速恢復|建議收藏
    問多久能恢復數據?」是否有DDL操作,檢查Mysql參數等等,發現天時地利人和,最後他翻出了沉澱已久的工具binlog2sql。binlog2sql究竟是什麼,它如何使用?是官方原廠的,還是開源的......額,官方原廠的不一定好用,開源的東西不一定差,合適才是最好!還是且聽小安Sir的分享吧。
  • 「刪庫跑路」使用Binlog日誌恢復誤刪的MySQL數據
    模擬一次誤刪數據的操作,並且使用binlog日誌恢復誤刪的數據。寫這篇文章的初衷,是有一次我真的險些把測試資料庫的一張表給刪除了,當時嚇出一身冷汗。看了上面binlog的定義,大家也應該能大致推理出binlog的三大用途:恢復數據:今天要說的重點資料庫複製:主從資料庫是通過將binlog傳給從庫,從庫有兩個線程,一個I/O線程,一個SQL線程,I/O線程讀取主庫傳過來的binlog內容並寫入到relay log,SQL線程從relay log裡面讀取內容
  • 必須了解的mysql三大日誌-binlog、redo log和undo log
    邏輯日誌:可以簡單理解為記錄的就是sql語句。物理日誌:因為mysql數據最終是保存在數據頁中的,物理日誌記錄的就是數據頁變更。binlog使用場景在實際應用中,binlog的主要使用場景有兩個,分別是主從複製和數據恢復。