每一个你不满意的现在,都有一个你不努力的曾经。
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..');
每一个你不满意的现在,都有一个你不努力的曾经。