binlog2sql使用總結

来源:http://www.cnblogs.com/ivictor/archive/2017/02/20/6418409.html
-Advertisement-
Play Games

binlog2sql是大眾點評開源的一款用於解析binlog的工具,在測試環境試用了下,還不錯。 其具有以下功能 1. 提取SQL 2. 生成回滾SQL 關於該工具的使用方法可參考github操作文檔:https://github.com/danfengcao/binlog2sql 個人感覺該文檔已 ...


binlog2sql是大眾點評開源的一款用於解析binlog的工具,在測試環境試用了下,還不錯。

 

其具有以下功能

1. 提取SQL

2. 生成回滾SQL

 

關於該工具的使用方法可參考github操作文檔:https://github.com/danfengcao/binlog2sql

個人感覺該文檔已相當簡單明瞭。

 

使用該工具的前提

1. binlog_format為ROW,且binlog_row_image為full或noblog,預設為full。

2. 必須開啟MySQL Server,理由有如下兩點:

   1> 它是基於BINLOG_DUMP協議來獲取binlog內容

   2> 需要讀取server端information_schema.COLUMNS表,獲取表結構的元信息,拼接成可視化的sql語句

該工具所需許可權如下:

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 

因為是偽裝成slave來獲取主的二進位事件,故無需對binlog有可讀許可權。

 

提取SQL示例

#  python binlog2sql.py -h192.168.244.10 -P3306 -uadmin -p123456 -dtest -ttest --start-file='mysql-bin.000028'

INSERT INTO `test`.`test`(`id`, `name`) VALUES (10, 'a'); #start 4 end 284 time 2017-02-17 15:36:27
INSERT INTO `test`.`test`(`id`, `name`) VALUES (11, 'b'); #start 4 end 376 time 2017-02-17 15:36:31
UPDATE `test`.`test` SET `id`=11, `name`='c' WHERE `id`=11 AND `name`='b' LIMIT 1; #start 4 end 476 time 2017-02-17 15:36:40
DELETE FROM `test`.`test` WHERE `id`=11 AND `name`='c' LIMIT 1; #start 4 end 568 time 2017-02-17 15:36:48
INSERT INTO `test`.`test`(`id`, `name`) VALUES (12, 'd'); #start 599 end 763 time 2017-02-17 15:37:09
INSERT INTO `test`.`test`(`id`, `name`) VALUES (13, 'c'); #start 794 end 958 time 2017-02-17 15:37:15
UPDATE `test`.`test` SET `id`=13, `name`='d' WHERE `id`=13 AND `name`='c' LIMIT 1; #start 989 end 1161 time 2017-02-17 15:37:23
DELETE FROM `test`.`test` WHERE `id`=13 AND `name`='d' LIMIT 1; #start 1192 end 1356 time 2017-02-17 15:37:30

 

生成回滾SQL示例

# python binlog2sql.py --flashback -h192.168.244.10 -P3306 -uadmin -p123456 -dtest -ttest --start-file='mysql-bin.000028'

INSERT INTO `test`.`test`(`id`, `name`) VALUES (13, 'd'); #start 1192 end 1356 time 2017-02-17 15:37:30
UPDATE `test`.`test` SET `id`=13, `name`='c' WHERE `id`=13 AND `name`='d' LIMIT 1; #start 989 end 1161 time 2017-02-17 15:37:23
DELETE FROM `test`.`test` WHERE `id`=13 AND `name`='c' LIMIT 1; #start 794 end 958 time 2017-02-17 15:37:15
DELETE FROM `test`.`test` WHERE `id`=12 AND `name`='d' LIMIT 1; #start 599 end 763 time 2017-02-17 15:37:09
INSERT INTO `test`.`test`(`id`, `name`) VALUES (11, 'c'); #start 4 end 568 time 2017-02-17 15:36:48
UPDATE `test`.`test` SET `id`=11, `name`='b' WHERE `id`=11 AND `name`='c' LIMIT 1; #start 4 end 476 time 2017-02-17 15:36:40
DELETE FROM `test`.`test` WHERE `id`=11 AND `name`='b' LIMIT 1; #start 4 end 376 time 2017-02-17 15:36:31
DELETE FROM `test`.`test` WHERE `id`=10 AND `name`='a' LIMIT 1; #start 4 end 284 time 2017-02-17 15:36:27

 

總結

1. 看了下源代碼,它本身的核心代碼比較少,主要是在pymysqlreplication的基礎上進行了二次開發。

    pymysqlreplication實現了MySQL複製協議,可捕捉不同類型的EVENT事件。

    具體可參考:https://github.com/noplay/python-mysql-replication

2. 個人感覺,直接解析文本格式的binlog,也未嘗不是一個好辦法。

    理由如下:

    1> binlog2sql強烈依賴於MySQL複製協議,如果複製協議發生改變,則該工具將不可用。

        雖然,複製協議發生改變的可能性很小(一般都會保持向前相容),但相對而言,自帶的mysqlbinlog肯定更懂binlog,基於mysqlbinlog解析後的結果進行處理,可完

        全屏蔽複製協議等底層細節。

    2> 用python來解析文本格式的binlog,本身也不是件難事。

         譬如,update語句在binlog中的對應的文本

         在得到表結構的情況下,基本上可離線解析。

### UPDATE `test`.`test`
### WHERE
###   @1=13 /* INT meta=0 nullable=0 is_null=0 */
###   @2='c' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */
### SET
###   @1=13 /* INT meta=0 nullable=0 is_null=0 */
###   @2='d' /* VARSTRING(20) meta=20 nullable=1 is_null=0 */

 

內網環境如何使用該工具呢?

該工具的使用依賴以下三個包:

PyMySQL==0.7.8
wheel==0.24.0
mysql-replication==0.9

其中,每個包又會依賴其它包,所以安裝這些包是一個比較麻煩的事情。

如果是在外網的環境下,可直接通過pip install安裝,它會自動下載並安裝依賴包的。

 

在內網環境下,可手動安裝這些包,目前,這些包已下載並打包,且已上傳到百度雲盤中,大家可自行下載。

http://pan.baidu.com/s/1qYQ2PPy

 

安裝教程:

# tar xvf binlog2sql.tar.gz

# cd binlog2sql/binlog2sql_dependencies/


# tar xvf setuptools-0.6c11.tar.gz

# cd setuptools-0.6c11

# python setup.py install

# cd ..

# tar xvf pip-9.0.1.tar.gz

# cd pip-9.0.1

# python setup.py install

# cd ..

# pip install *.whl mysql-replication-0.9.tar.gz

DEPRECATION: Python 2.6 is no longer supported by the Python core team, please upgrade your Python. A future version of pip will drop
 support for Python 2.6Processing ./mysql-replication-0.9.tar.gz
Processing ./argparse-1.4.0-py2.py3-none-any.whl
Processing ./linecache2-1.0.0-py2.py3-none-any.whl
Requirement already satisfied: PyMySQL==0.7.8 from file:///root/binlog2sql/binlog2sql_dependencies/PyMySQL-0.7.8-py2-none-any.whl in 
/usr/lib/python2.6/site-packagesProcessing ./six-1.10.0-py2.py3-none-any.whl
Processing ./traceback2-1.4.0-py2.py3-none-any.whl
Processing ./unittest2-1.1.0-py2.py3-none-any.whl
Processing ./wheel-0.24.0-py2.py3-none-any.whl
Installing collected packages: argparse, linecache2, six, traceback2, unittest2, wheel, mysql-replication
  Running setup.py install for mysql-replication ... done
Successfully installed argparse-1.4.0 linecache2-1.0.0 mysql-replication-0.9 six-1.10.0 traceback2-1.4.0 unittest2-1.1.0 wheel-0.24.0

至此,所有依賴包安裝完畢。

 

測試一下

# cd ..

# cd binlog2sql

# python binlog2sql.py -h 192.168.244.20 -u root -p 123456  -d test -t test --start-file mysql-bin.000022

INSERT INTO `test`.`test`(`id`, `name`) VALUES (4, 'd'); #start 4 end 284 time 2017-02-21 10:44:02
INSERT INTO `test`.`test`(`id`, `name`) VALUES (5, 'f'); #start 315 end 479 time 2017-02-21 10:44:05
DELETE FROM `test`.`test` WHERE `id`=4 AND `name`='d' LIMIT 1; #start 510 end 674 time 2017-02-21 10:44:09
UPDATE `test`.`test` SET `id`=5, `name`='t' WHERE `id`=5 AND `name`='f' LIMIT 1; #start 705 end 877 time 2017-02-21 10:44:22

 

Tips,如何有效率的下載依賴包?

pip-9.0.1新增了一個選項download,可以只下載包(自動下載相關依賴包)而不安裝它。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.啟動/停止MySQL服務 啟動:net start mysql 停止:net stop mysql 2.MySQL登錄/退出 登錄:mysql 參數;如果連接的是本地伺服器,一般用命令:mysql -uroot-p******(******代表密碼) 退出:mysql >exit;或mysql ...
  • 杭州湖畔網路技術有限公司是一家專業提供SaaS化電商ERP服務的創業公司,主要用戶群體為經營淘寶、天貓、京東等主流電商平臺、自建商城、線下渠道的商家及中小企業。作為SaaS服務提供商,服務數萬乃至數十萬級用戶是業務架構初期就必須考慮的問題。龐大的用戶群以及海量的用戶數據意味著基礎設施的構建必須兼顧高 ...
  • 寫在前面: MySQL是一個關係型資料庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 是最流行的關係型資料庫管理系統之一,在 WEB 應用方面,MySQL是最好的 RDBMS (Relational Database Management System,關 ...
  • stat path [watch] set path data [version] ls path [watch] delquota [-n|-b] path ls2 path [watch] setAcl path acl setquota -n|-b val path history redo ...
  • 一、以一行數據的形式,顯示本年的12月的數據,本示例以2017年為例,根據CreateDate欄位判斷,計算總和,查詢語句如下: 查詢結果如下: 二、根據當前日期,以列的數據形式,顯示本年的12個月的數據,查詢語句如下: 查詢結果如下: 二、具體應用示例:以2017為例,查詢語句如下: 查詢結果如下 ...
  • ,不要建output文件夾 好像這兩個圖片顯示不出來了 12:44:34,422 WARN NativeCodeLoader:62 - Unable to load native-hadoop library for your platform... using builtin-java class ...
  • 1.打開"終端視窗",輸入"sudo apt-get update"-->回車-->"輸入當前登錄用戶的管理員密碼"-->回車,就可以了。 2.打開"終端視窗",輸入"sudo apt-get install openssh-server"-->回車-->輸入"y"-->回車-->安裝完成。 3.打 ...
  • 1、Redis是一個支持持久化的記憶體資料庫,redis會經常將記憶體中的數據同步到硬碟上來保證數據持久化,從而避免伺服器宕機數據丟失問題,或者減少伺服器記憶體消耗提高性能。 2、Redis的虛擬記憶體與操作系統中的虛擬記憶體不是一回事,但思路相同。就是將不經常訪問的數據從記憶體交換到磁碟中,從而騰出寶貴的記憶體... ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...