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

贺春旸 2023-06-27 10:18:00
工具研发者介绍

贺春旸,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峰会更多详情及报名

最新评论
访客 2024年04月08日

如果字段的最大可能长度超过255字节,那么长度值可能…

访客 2024年03月04日

只能说作者太用心了,优秀

访客 2024年02月23日

感谢详解

访客 2024年02月20日

一般干个7-8年(即30岁左右),能做到年入40w-50w;有…

访客 2023年08月20日

230721

活动预告