社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

dba+开源工具:补齐MySQL 8.0迁移短板,Binlog解析ETL抽取数据工具(附下载)

DBAplus社群 • 1 年前 • 296 次点击  

工具研发者介绍

贺春旸,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/)



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



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$' -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


更多开源工具&脚本下载



更多开源工具及脚本获取方式:
  • 关注微信公众号【dbaplus社群】,点击菜单栏【资源下载】
  • 登陆dbaplus社群官网:http://dbaplus.cn/list-142-1.html


>>>>

相关图谱推荐 - 分布式数据库评测指南



《分布式数据库评测指南》由dbaplus社群联合发起人韩锋老师与社群共同编制,浓缩了数据库选型评测项精要,评测维度覆盖6大功能(数据库基本功能、数据库内核功能、数据库管理功能、数据库架构功能、数据库开发功能、数据库其他功能)共300+技术项,明晰数据库选型要点及设计思路,让广大数据库从业者在选型路上不再迷茫。

获取方式:关注微信公众号【dbaplus社群】,消息栏回复【图谱】,即可获取下载链接


>>>>

相关活动推荐 - Gdevops峰会·北京站



演讲嘉宾所在单位:中国信通院、京东、美团、字节跳动、浙江移动、OceanBase、新浪微博、爱奇艺、哔哩哔哩、知乎、vivo、工商银行、建设银行、农业银行、平安银行、新东方、货拉拉、华东师范大学等产学研界技术领跑单位。

演讲议题聚焦:  
  • 数据库:HTAP丨图数据库丨向量数据库丨AI4DB丨索引推荐

  • 运维:稳定性建设丨可观测性丨SRE丨AIOps丨FinOps丨运维数字化转型

  • 金融科技:智能运维丨分布式改造丨国产化替代丨数字化转型


↓↓ 点这里了解Gdevops峰会更多详情及报名

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/156667
 
296 次点击