概述
Altinity开发了一个开源的clickhouse-mysql工具,该工具可帮助将现有的MySQL表迁移到ClickHouse并设置将更改从MySQL实时复制到ClickHouse(仅适用于INSERTS)。在这里,我们通过一个简单的示例演示如何做到这一点。
我们将使用航空公司准时测试数据集的子集:
mysql> select count(*) from airline.ontime; +----------+ | count(*) | +----------+ | 1289551 | +----------+
迁移过程包括三个步骤:
创建CH表
将现有数据从MySQL复制到CH
设置MySQL到ClickHouse的复制
先决条件
clickhouse-mysql是Python脚本,因此需要安装Python> = 3.5。“ pypy”比预期的效果更好。
MySQL和ClickHouse集成需要以下模块:
pip install mysqlclient
pip install mysql-replication
pip install clickhouse-driver
MySQL应该为复制启用了binlog。
1.创建ClickHouse表。
clickhouse-mysql有几种模式。我们从ClickHouse表创建助手开始。
pypy clickhouse-mysql.py --log-file=/dev/null --src-host=127.0.0.1 --src-user=root --src-only-tables=airline.ontime --table-templates
这将生成需要手动编辑的ClickHouse表DDL模板。
CREATE TABLE `airline`.`ontime` ( `Year` Nullable(UInt16), ... CUT ... `Div5TailNum` Nullable(String) ) ENGINE = MergeTree(, (), 8192)
需要手动进行以下更改:
指定分区列()。
指定主键列()
确保分区和主键列不可为空。
例如,它看起来像
CREATE TABLE `airline`.`ontime` ( `Year` UInt16, ...CUT... `Div5TailNum` Nullable(String) ) ENGINE = MergeTree(FlightDate, (FlightDate, Year, Month), 8192)
准备好表定义后,运行clickhouse-client将其创建为交互模式或从文件创建。
2.将现有数据从MySQL复制到ClickHouse
可以使用标准MySQL和ClickHouse命令执行数据复制。
sudo mysqldump -u root --tz-utc --quick --fields-terminated-by=, --fields-optionally-enclosed-by=" --fields-escaped-by=\ --tab="$CSV_FILES_DIR"/ airline ontime sudo cat "$CSV_FILES_DIR"/ontime.txt | clickhouse-client --query="INSERT INTO airline.ontime FORMAT CSV"
如果没有错误,您可以检查clickhouse-client中的表:
:) select count() from airline.ontime; SELECT count() FROM airline.ontime ┌─count()─┐ │ 1289551 │ └─────────┘
3.设置MySQL到ClickHouse的复制
可以通过示例shell脚本启动ontime数据库的复制日志读取器:
./examples/run_airline_ontime_data_mysql_to_ch_reader.sh
如果您好奇它的作用,它将使用以下参数运行“ clickhouse-mysql”:
pypy clickhouse-mysql --src-resume --src-wait --nice-pause=1 --log-level=info --log-file=ontime.log --src-host=127.0.0.1 --src-user=root --dst-host=127.0.0.1 --csvpool --csvpool-file-path-prefix=qwe_ --mempool-max-flush-interval=60 --mempool-max-events-num=10000
现在让我们测试如何将插入内容从MySQL传播到ClickHouse。我们将在MySQL中复制数据。
mysql> insert into airline.ontime select * from airline.ontime; mysql> select count(*) from airline.ontime; +----------+ | count(*) | +----------+ | 2579102 | +----------+
并检查ClickHouse一侧。
:) select count() from airline.ontime; SELECT count() FROM airline.ontime ┌─count()─┐ │ 2579102 │ └─────────┘
插入的记录已填充到ClickHouse。
结论
几个月前,ProxySQL 引入了ClickHouse支持,允许通过MySQL协议访问ClickHouse。我们对此进行了进一步介绍,并证明可以使用MySQL Binlog读取技术在ClickHouse中实时获取MySQL数据。有多种方法可以做到这一点。像Altinity'clickhouse-mysql'原型这样的自定义实现是一种方法,或者可以使用更多通用技术,例如Uber的StorageTapper从MySQL二进制日志生成Kafka流,然后可以使用Kafka引擎或专用使用者将其插入ClickHouse。
最后
以上就是昏睡飞鸟为你收集整理的clickhouse 同步mysql_MySQL到ClickHouse数据的迁移和复制的全部内容,希望文章能够帮你解决clickhouse 同步mysql_MySQL到ClickHouse数据的迁移和复制所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复