工具简介由于MariaDB已经远离MySQL,源工从MySQL 8.0迁移到MariaDB 10.5时,具补解析据工具binlog同步复制已经不兼容(参考手册:https://mariadb.com/kb/en/mariadb-vs-mysql-compatibility/)。齐M迁移取数 图片
1、短板若MariaDB是源工主库,MySQL是具补解析据工具从库,在GTID模式下,齐M迁移取数从MariaDB同步复制数据时,短板GTID与MySQL不兼容,源工同步将报错。具补解析据工具 2、齐M迁移取数若MySQL是短板主库,MariaDB是源工从库,MariaDB无法从MySQL 8.0主库上复制,具补解析据工具因为MySQL 8.0具有不兼容的齐M迁移取数二进制日志格式。 因此,借助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"1. 2、前台运行: 复制shell> python3 binlog_parse_queue.py1. 图片
3、后台运行: 复制shell> nohup python3 binlog_parse_queue.py > from_mysql_to_mariadb.log 2>&1 &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", ""))1.2. 参考如下链接: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"1. 注: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(修改脚本里的配置信息)1. 注:mysql_to_clickhose_schema_test.py(该工具仅为单表测试使用) 运行: 复制shell> python3 mysql_to_clickhose_schema.py1. 原理:连接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 ./1. 注:需要mydumper 0.12.3-3版本支持导出CSV格式。 第二步: 复制clickhouse-client --query="INSERT INTO hcy.user FORMAT CSV" < hcy.user.00000.dat1. 第三步:或者使用mysql_to_clickhouse_sync.py工具(MySQL全量数据导入到ClickHouse里,默认并行10张表同时导出数据,每次轮询取1000条数据)。 使用条件:表必须有自增主键,测试环境MySQL 8.0 如果你说服不了开发对每张表增加自增主键ID,那么你要设置参数 复制sql_generate_invisible_primary_key1. 开启这个参数,会在建表时,检查表中是否有主键,如果没有主键,则会自动创建。该参数非常实用,减少了DBA对SQL语句表结构的审计(参考:https://blog.51cto.com/hcymysql/5952924)。 4、binlog_parse_clickhouse.py(ETL抽数据工具)将MySQL8.0增量数据迁移至ClickHouse 复制shell> vim binlog_parse_clickhouse.py(修改脚本里的配置信息)1. 前台运行: 复制shell> python3 binlog_parse_clickhouse.py1. 后台运行: 复制shell> nohup python3 binlog_parse_clickhouse.py > from_mysql_to_clickhouse.log 2>&1 &1. 下载方式此工具现通过dbaplus社群免费为大家提供下载使用。若使用过程中有任何问题或建议,可随时与我们联系,欢迎大家试用。企商汇 登录以下链接即可下载: https://github.com/hcymysql/binlog_parse_sql |