我是靠谱客的博主 昏睡飞鸟,最近开发中收集的这篇文章主要介绍clickhouse 同步mysql_MySQL到ClickHouse数据的迁移和复制,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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数据的迁移和复制所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部