本文介绍两种将 MySQL 数据库中的数据导入到 ClickHouse 集群的方案。
clickhouse-mysql-data-reader
工具来实现数据导入。本文示例中,将 MySQL 数据表 test.clickhouse_test 中的数据导入到 ClickHouse 集群中,该表的 Schema 如下:
ClickHouse 的 MySQL 表引擎可以对存储在远程 MySQL 服务器上的数据执行 SELECT 查询。基于这样能力,利用CREATE ... SELECT * FROM
或者INSERT INTO ... SELECT * FROM
语句即可完成数据导入。
具体步骤:
还可以将步骤2/3合并成一个步骤,即采用 CREATE TABLE AS SELECT * FROM
方式来达到同样效果。
ClickHouse 支持 MySQL 外表引擎,是否还有必要将数据导入到 ClickHouse 中?
是非常有必要的。MySQL 外表引擎,本身不存储数据,数据存储在 MySQL 中。在复制查询中,特别是有 JOIN 的情况下,访问外表是相当慢的,甚至不可能完成。该方案有明显缺陷,无法增量导入数据。
Altinity 提供了一个工具 clickhouse-mysql-data-reader 来实现数据导入。该工具可以实现 MySQL 的存量数据导出和增量数据的导出。
按照官网推荐,使用 pypy 工具能够显著提升 clickhouse-mysql-data-reader 导入数据的性能。
工具准备
pypy/bin/pypy3 -m ensurepip
。pypy/bin/pip3 install mysql-replication
和 pypy/bin/pip3 install clickhouse-driver
。pypy/bin/pip3 install clickhouse-mysql
,执行 pypy/bin/clickhouse-mysql --install
。yum install -y clickhouse-client
。yum install -y mysql-community-devel
。CREATE USER 'root'@'%' IDENTIFIED BY 'cloud';
GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE, SUPER ON *.* TO 'root'@'%';
FLUSH PRIVILEGES;
准备工作完成后,即可使用该工具完成数据从 MySQL 导入到 ClickHouse 集群中。具体步骤如下:
clickhouse-client -m < create.sql
。参数 | 说明 |
---|---|
src-host | MySQL 数据库 IP |
src-user | MySQL 数据库用户名 |
src-password | MySQL 数据库密码 |
create-table-sql-template | 生产 ClickHouse 的建表脚本 |
with-create-database | 建表脚本中增加创建数据库语句 |
src-tables | 源表(MySQL 表) |
mempool-max-flush-interval | mempool flush 的时间周期 |
src-server-id | 源 MySQL 是否为 master 节点 |
src-resume | 断点续传 |
src-wait | 等待数据 |
nice-pause | 如果没有数据,睡眠的时间间隔 |
本页内容是否解决了您的问题?