每一个你不满意的现在,都有一个你不努力的曾经。

clickhouse通过MaterializeMySQL库引擎实现mysql实时同步


clickhouse通过MaterializeMySQL库引擎实现mysql实时同步

1). MySQL 开启 binlog 和 GTID 模式

(1) 确保 MySQL 开启了 binlog 功能,且格式为 ROW 打开my.cnf,在mysqld下添加:

server-id=1 
log-bin=mysql-bin
binlog_format=ROW

(2) 开启 GTID 模式;如果 clickhouse 使用的是 20.8 prestable 之后发布的版本,那么 MySQL 还需要配置开启 GTID 模式, 这种方式在 mysql 主从模式下可以确保数据同步的一致性(主从切换时)。

gtid-mode=on
enforce-gtid-consistency=1 # 设置为主从强一致性
log-slave-updates=1 # 记录日志

GTID 是 MySQL 复制增强版,从 MySQL 5.6 版本开始支持,目前已经是 MySQL 主流。复制模式。它为每个 event 分配一个全局唯一 ID 和序号,我们可以不用关心 MySQL 集群主从拓扑结构,直接告知 MySQL 这个 GTID 即可。

查询以下语句进行验证:

show variables like '%gtid_mode%';
show variables like '%enforce_gtid_consistency%';
show variables like '%binlog_format%';

结果

gtid_mode    ON
enforce_gtid_consistency    ON
binlog_format    ROW

如以上值,则代表可以进行同步。

(3) 注意需重启 MySQL 服务

sudo systemctl restart mysqld

(4) 用户权限 同步用户建议最高级用户(拥有all权限)或者用户有 RELOAD, REPLICATION SLAVE, REPLICATION CLIENT 相关权限。 如为普通用户【5.7版本mysql】需执行 {必须 . 才是服务服务器权限}

grant select,reload,replication slave,replication client on *.* to syncdata@'%' identified  by "password..";

flush privileges;--刷新权限

2). ClickHouse 开启 ClickHouse 物化引擎

(1) 修改配置文件

[root@localhost ~]# cd /etc/clickhouse-server

[root@localhost clickhouse-server]# vim users.xml

<profiles><!-- Default settings. --><default>
        .....(省略)
        <!-- 添加. -->
        <allow_experimental_window_functions>1</allow_experimental_window_functions></default>

.....(以下省略)
</profiles>

(2) 临时开启、注意每次登录默认是关闭的,需要使用再操作打开

set allow_experimental_database_materialize_mysql=1;

3) ClickHouse 中创建 MaterializeMySQL 数据库

CREATE DATABASE test_binlog ENGINE = MaterializedMySQL('localhost:3306','databases','syncdata','password..');
Card image cap

每一个你不满意的现在,都有一个你不努力的曾经。