ClickHouse 20.8将新增 MaterializeMySQL引擎 ,可通过binlog日志实时物化mysql数据,极大提升了数仓的查询性能和数据同步的时效性;原有mysql中承担的数据分析工作 可交由clickhouse去做,这么做可显著降低线上mysql的负载,从此OLTP与OLAP业务实现完美融合。
我的环境:
RedHat 7
ClickHouse 20.8.3.18
Mysql 5.7(window上安装的mysql服务)
1)查看当前mysql配置情况
show variables like ‘%log%bin%‘;
show variables like ‘%binlog_format%‘;
show variables like ‘server_id‘;
select version();
2)设置mysql配置参数
需要的配置为:
log-bin=mysqlbin.log
binlog_format=ROW
server-id=1
我这边需要配置的是开启binlog
编辑my.ini (linux下是my.conf文件)
重启mysql服务
重启之后:show variables like ‘%log%bin%‘;可以看到已经开启binlog.
3)设置clickhouse配置参数,开启mysql物理化引擎
查看clickhouse的版本
select version()
查看allow_experimental_database_materialize_mysql的值
select * from system.settings where name =‘allow_experimental_database_materialize_mysql‘;
设置allow_experimental_database_materialize_mysql=1 (# 因为该功能目前还处于实验阶段,在使用之前需要开启)
set allow_experimental_database_materialize_mysql=1
4)在mysql中创建clickhouse_test数据库,并创建user表,添加了2条数据,如下图
5)在clickhouse中创建mysql的复制管道
先查看下clickhouse中的数据库信息
创建clickhouse_mysql数据库,关联到本地的clickhouse_test数据库
CREATE DATABASE clickhouse_mysql ENGINE = MaterializeMySQL(‘192.168.31.250:3306‘, ‘clickhouse_test‘, ‘root‘, ‘123456‘)
上图可以看到clickhouse_mysql数据库创建好了
现在进入到clickhouse_mysql,查看user表
报错:需要在MySQL端开启GTID模式
确保MySQL版本在5.6. 以上,在MySQL 5.7版本支持热部署,即不停止服务的情况下开启GTID模式
查看mysql的gtid_mode值
查看mysql的 enforce_gtid_consistency值
开启enforce_gtid_consistency和gtid_mode:
SET GLOBAL ENFORCE_GTID_CONSISTENCY = ‘WARN‘; SET GLOBAL ENFORCE_GTID_CONSISTENCY = ‘ON‘; SET GLOBAL GTID_MODE = ‘OFF_PERMISSIVE‘; SET GLOBAL GTID_MODE = ‘ON_PERMISSIVE‘; SET GLOBAL GTID_MODE = ‘ON‘;
验证:
开启之后,删除刚才在clickhouse中创建的clickhouse_mysql数据库,重新创建
进入到clickhouse_mysql数据库,查看user表,可以看到我们刚才插入的数据,而是是全量数据
现在测试下增量数据:
在mysql端插入了一条数据,id=3
在clickhouse中查看数据
同步过来了!!!
后续还有很多没验证
参考: https://blog.csdn.net/weixin_42993799/article/details/109020316