ClickHouse MaterializeMySQL 数据库引擎

ClickHouse 20.8将新增 MaterializeMySQL引擎 ,可通过binlog日志实时物化mysql数据,极大提升了数仓的查询性能和数据同步的时效性;原有mysql中承担的数据分析工作 可交由clickhouse去做,这么做可显著降低线上mysql的负载,从此OLTP与OLAP业务实现完美融合。

 

MaterializeMySQL database engine 支持的情况:
 1.支持mysql 库级别的数据同步,暂不支持表级别的。
 2.MySQL 库映射到clickhouse中自动创建为ReplacingMergeTree 引擎的表
 3.支持全量和增量同步,首次创建数据库引擎时进行一次全量复制,之后通过监控binlog变化进行增量数据同步
 4.支持的MySQL版本:5.6 、5.7、8.0
 5.支持的操作:insert,update,delete,alter,create,drop,truncate等大部分DDL操作
 6.支持的MySQL复制为GTID复制

我的环境:

RedHat 7

ClickHouse 20.8.3.18

Mysql  5.7(window上安装的mysql服务)

1)查看当前mysql配置情况

show variables like ‘%log%bin%‘;  

ClickHouse MaterializeMySQL 数据库引擎

 

 show variables like ‘%binlog_format%‘;

ClickHouse MaterializeMySQL 数据库引擎

 

 show variables like ‘server_id‘;

ClickHouse MaterializeMySQL 数据库引擎

 

 select version();

ClickHouse MaterializeMySQL 数据库引擎

 

 2)设置mysql配置参数

需要的配置为:

log-bin=mysqlbin.log
binlog_format=ROW
server-id=1

我这边需要配置的是开启binlog

编辑my.ini   (linux下是my.conf文件)

ClickHouse MaterializeMySQL 数据库引擎

 

 重启mysql服务

ClickHouse MaterializeMySQL 数据库引擎

 

 重启之后:show variables like ‘%log%bin%‘;可以看到已经开启binlog.

ClickHouse MaterializeMySQL 数据库引擎

 

3)设置clickhouse配置参数,开启mysql物理化引擎

 查看clickhouse的版本

select version()

ClickHouse MaterializeMySQL 数据库引擎

 

查看allow_experimental_database_materialize_mysql的值

select * from system.settings where name =‘allow_experimental_database_materialize_mysql‘;

ClickHouse MaterializeMySQL 数据库引擎

 

 

 

 设置allow_experimental_database_materialize_mysql=1 (# 因为该功能目前还处于实验阶段,在使用之前需要开启)

 set allow_experimental_database_materialize_mysql=1

ClickHouse MaterializeMySQL 数据库引擎

 

 

 4)在mysql中创建clickhouse_test数据库,并创建user表,添加了2条数据,如下图

ClickHouse MaterializeMySQL 数据库引擎

 

 

 5)在clickhouse中创建mysql的复制管道

先查看下clickhouse中的数据库信息

ClickHouse MaterializeMySQL 数据库引擎

 

 

 创建clickhouse_mysql数据库,关联到本地的clickhouse_test数据库

CREATE DATABASE clickhouse_mysql ENGINE = MaterializeMySQL(‘192.168.31.250:3306‘, ‘clickhouse_test‘, ‘root‘, ‘123456‘)

ClickHouse MaterializeMySQL 数据库引擎

 

 

 上图可以看到clickhouse_mysql数据库创建好了

现在进入到clickhouse_mysql,查看user表

ClickHouse MaterializeMySQL 数据库引擎

 

 

报错:需要在MySQL端开启GTID模式

确保MySQL版本在5.6. 以上,在MySQL 5.7版本支持热部署,即不停止服务的情况下开启GTID模式

查看mysql的gtid_mode值

ClickHouse MaterializeMySQL 数据库引擎

 

 

 查看mysql的 enforce_gtid_consistency值

ClickHouse MaterializeMySQL 数据库引擎

 

 

 

开启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 MaterializeMySQL 数据库引擎ClickHouse MaterializeMySQL 数据库引擎

 

 开启之后,删除刚才在clickhouse中创建的clickhouse_mysql数据库,重新创建

ClickHouse MaterializeMySQL 数据库引擎

 

 进入到clickhouse_mysql数据库,查看user表,可以看到我们刚才插入的数据,而是是全量数据

 ClickHouse MaterializeMySQL 数据库引擎

 

 现在测试下增量数据:

在mysql端插入了一条数据,id=3

ClickHouse MaterializeMySQL 数据库引擎

 

 在clickhouse中查看数据

ClickHouse MaterializeMySQL 数据库引擎

 

 同步过来了!!!

后续还有很多没验证

参考: https://blog.csdn.net/weixin_42993799/article/details/109020316

ClickHouse MaterializeMySQL 数据库引擎

上一篇:oracle误删除数据文件后恢复


下一篇:03.数据库系统