天天看點

dba+開源工具:補齊MySQL8.0短闆 Binlog解析ETL抽取資料(附下載下傳)

作者:dbaplus社群

工具研發者介紹

賀春旸,dbaplus社群金牌專家,凡普金科和愛錢進DBA團隊負責人,《MySQL管理之道:性能調優、高可用與監控》第一&二版、《MySQL運維進階指南》作者,曾任職于中國移動飛信、安卓機鋒網。五次榮獲dbaplus年度MVP,緻力于MariaDB、MongoDB等開源技術的研究,主要負責資料庫性能調優、監控和架構設計。

工具下載下傳:

https://github.com/hcymysql/binlog_parse_sql

工具簡介

由于MariaDB已經遠離MySQL,從MySQL 8.0遷移到MariaDB 10.5時,binlog同步複制已經不相容(參考手冊:https://mariadb.com/kb/en/mariadb-vs-mysql-compatibility/)。

dba+開源工具:補齊MySQL8.0短闆 Binlog解析ETL抽取資料(附下載下傳)

1、若MariaDB是主庫,MySQL是從庫,在GTID模式下,從MariaDB同步複制資料時,GTID與MySQL不相容,同步将報錯。

2、若MySQL是主庫,MariaDB是從庫,MariaDB無法從MySQL 8.0主庫上複制,因為MySQL 8.0具有不相容的二進制日志格式。

是以,借助binlog_parse_sql工具,可将binlog解析并生成SQL語句,反向插入MariaDB資料庫裡。

使用場景

1、從MySQL 8.0實時解析binlog并複制到MariaDB,适用于将MySQL 8.0遷移至MariaDB(ETL抽資料工具)--- binlog_parse_queue.py

2、資料恢複(研發手抖誤删除一張表,通過曆史全量恢複+binlog增量恢複)

3、從MySQL 8.0實時解析binlog并複制到ClickHouse,适用于将MySQL 8.0遷移至ClickHouse(ETL抽資料工具)--- binlog_parse_clickhouse.py

原理

将解析binlog和執行SQL語句的兩個過程分别由兩個線程來執行。其中,解析binlog的線程每次解析完一個事件後通過隊列将SQL語句傳給SQL執行線程,SQL執行線程從隊列中取出SQL語句并按順序依次執行,這樣就保證了SQL語句的串行執行。

MariaDB使用

1、安裝:

shell> pip3 install pymysql mysql-replication -i "http://mirrors.aliyun.com/pypi/simple" --trusted-host "mirrors.aliyun.com"           

2、前台運作:

shell> python3 binlog_parse_queue.py           
dba+開源工具:補齊MySQL8.0短闆 Binlog解析ETL抽取資料(附下載下傳)

3、背景運作:

shell> nohup python3 binlog_parse_queue.py > from_mysql_to_mariadb.log 2>&1 &           

4、工具運作後,會生成binlog_info.txt檔案,即實時儲存已經解析過的binlog檔案名和position位置點,以友善程式挂掉後的斷點續傳。

注:運作後如報錯LookupError: unknown encoding: utf8mb3

解決方案:

編輯/usr/local/python3/lib/python3.10/site-packages/pymysql/charset.py檔案,尾部增加如下兩行:

_charsets.add(Charset(256, "utf8mb3", "utf8mb3_general_ci", "Yes"))
_charsets.add(Charset(257, "utf8mb3", "utf8mb3_bin", ""))           

參考如下連結:https://github.com/julien-duponchelle/python-mysql-replication/issues/386

ClickHouse使用

1、安裝:

shell> pip3 install clickhouse-driver -i "http://mirrors.aliyun.com/pypi/simple" --trusted-host "mirrors.aliyun.com"           

注:clickhouse_driver庫需要調用ssl,由于python 3.10之後版本不在支援libressl使用ssl,需要用openssl 1.1.1版本或者更高版本。

參見:python 3.10編譯安裝報SSL失敗解決方法(https://blog.csdn.net/mdh17322249/article/details/123966953)

2、MySQL表結構轉換為ClickHouse表結構

shell> vim mysql_to_clickhose_schema.py(修改腳本裡的配置資訊)           

注:mysql_to_clickhose_schema_test.py(該工具僅為單表測試使用)

運作:

shell> python3 mysql_to_clickhose_schema.py           

原理:連接配接MySQL擷取表結構schema,然後在ClickHouse裡執行建表語句。

3、MySQL全量資料遷移至ClickHouse步驟:

第一步:

/usr/bin/mydumper -h 192.168.192.180 -u hechunyang -p wdhcy159753 -P 3306 --no-schemas -t 12 --csv -v 3 --regex '^hcy.user#39; -o ./           

注:需要mydumper 0.12.3-3版本支援導出CSV格式。

第二步:

clickhouse-client --query="INSERT INTO hcy.user FORMAT CSV" < hcy.user.00000.dat           

第三步:或者使用mysql_to_clickhouse_sync.py工具(MySQL全量資料導入到ClickHouse裡,預設并行10張表同時導出資料,每次輪詢取1000條資料)。

使用條件:表必須有自增主鍵,測試環境MySQL 8.0

如果你說服不了開發對每張表增加自增主鍵ID,那麼你要設定參數

sql_generate_invisible_primary_key           

開啟這個參數,會在建表時,檢查表中是否有主鍵,如果沒有主鍵,則會自動建立。該參數非常實用,減少了DBA對SQL語句表結構的審計(參考:https://blog.51cto.com/hcymysql/5952924)。

4、binlog_parse_clickhouse.py(ETL抽資料工具)将MySQL8.0增量資料遷移至ClickHouse

shell> vim binlog_parse_clickhouse.py(修改腳本裡的配置資訊)           

前台運作:

shell> python3 binlog_parse_clickhouse.py           

背景運作:

shell> nohup python3 binlog_parse_clickhouse.py > from_mysql_to_clickhouse.log 2>&1 &           

下載下傳方式

此工具現通過dbaplus社群免費為大家提供下載下傳使用。若使用過程中有任何問題或建議,可随時與我們聯系,歡迎大家試用。

登入以下連結即可下載下傳:

https://github.com/hcymysql/binlog_parse_sql

更多開源工具&腳本下載下傳

dba+開源工具:補齊MySQL8.0短闆 Binlog解析ETL抽取資料(附下載下傳)

更多開源工具及腳本擷取方式:

  • 關注微信公衆号【dbaplus社群】,點選菜單欄【資源下載下傳】
  • 登陸dbaplus社群官網:http://dbaplus.cn/list-142-1.html

>>>>相關圖譜推薦 - 分布式資料庫評測指南

dba+開源工具:補齊MySQL8.0短闆 Binlog解析ETL抽取資料(附下載下傳)

《分布式資料庫評測指南》由dbaplus社群聯合發起人韓鋒老師與社群共同編制,濃縮了資料庫選型評測項精要,評測次元覆寫6大功能(資料庫基本功能、資料庫核心功能、資料庫管理功能、資料庫架構功能、資料庫開發功能、資料庫其他功能)共300+技術項,明晰資料庫選型要點及設計思路,讓廣大資料庫從業者在選型路上不再迷茫。

擷取方式:關注微信公衆号【dbaplus社群】,消息欄回複【圖譜】,即可擷取下載下傳連結

>>>>相關活動推薦 - Gdevops峰會·北京站

演講嘉賓所在機關:中國信通院、京東、美團、位元組跳動、浙江移動、OceanBase、新浪微網誌、愛奇藝、哔哩哔哩、知乎、vivo、工商銀行、建設銀行、農業銀行、平安銀行、新東方、貨拉拉、華東師範大學等産學研界技術領跑機關。

演講議題聚焦:

  • 資料庫:HTAP丨圖資料庫丨向量資料庫丨AI4DB丨索引推薦
  • 運維:穩定性建設丨可觀測性丨SRE丨AIOps丨FinOps丨運維數字化轉型
  • 金融科技:智能運維丨分布式改造丨國産化替代丨數字化轉型

了解Gdevops峰會更多詳情及報名:2023 Gdevops全球靈活運維峰會-北京站 �-�百格活動

關于我們

dbaplus社群是圍繞Database、BigData、AIOps的企業級專業社群。資深大咖、技術幹貨,每天精品原創文章推送,每周線上技術分享,每月線下技術沙龍,每季度Gdevops&DAMS行業大會。

關注公衆号【dbaplus社群】,擷取更多原創技術文章和精選工具下載下傳

繼續閱讀