5

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

 1 year ago
source link: https://dbaplus.cn/news-152-5373-1.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

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

贺春旸 2023-06-27 10:19:01

工具研发者介绍

贺春旸,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社群免费为大家提供下载使用。若使用过程中有任何问题或建议,可随时与我们联系,欢迎大家试用。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK