前 言
ClickHouse无疑是目前最火的OLAP解决方案,笔者所在的运维团队,ClickHouse的数量近两年增长迅猛。
最近老板安排了一个任务,要求我调研现在MySQL到ClickHouse的同步工具,方便后面将线上的在线OLTP数据实时同步给线下的OLAP ClickHouse,这样业务人员和运营人员基于它进行统计查询更直观快速。
目前,市面上的相关工具和产品,主要分为三类:
1 ClickHouse原生提供的MySQL同步工具
2 命令行式的MySQL to ClickHouse同步工具
3 界面引导式的MySQL to ClickHouse同步工具
01 ClickHouse原生同步工具
ClickHouse 官方提供了MaterializedMySQL的同步复制工具,它会获取MySQL的binlog,并重放DDL和DML。但是这个特性没有release,官方文档用醒目的字体显示“This is an experimental feature that should not be used in production.”不能用在生产环境中,并且看代码也有一段时间没有更新了。
测试结果如下:
-
在MySQL上创建一个表。
mysql> create database db1;
mysql> create table test1 (a INT PRIMARY KEY, b INT);
-
在ClickHouse上新建MaterializeMySQL的表。
## 这里要专门设置以便clickhouse能使用这个特性
ck> set allow_experimental_database_materialize_mysql=1;
## 这里创建连接到user@192.168.1.17:3306/db1的database连接,命名为db1_ck
ck> CREATE DATABASE db1_ck ENGINE = MaterializeMySQL('192.168.1.17:3306', 'db1', 'user', '***');
## 进入db1_ck这个数据库
ck> use db1_ck;
## 查看db1_ck库下的表,可以看到test1这个表
ck> show tables;
-
查看test1这个表在ck上的表结构。
ck> show create table test1;
CREATE TABLE db1_ck.test1
(
`a` Int32,
`b` Nullable(Int32),
`_sign` Int8 MATERIALIZED 1,
`_version` UInt64 MATERIALIZED 1,
INDEX _vers