目录
整合mysql数据库
!!!clickhouse不当当支持mysql,还支持其他的数据库,需要的话去官方网站上可以查看到
MaterializeMySQL引擎
MaterializeMySQL该引擎能映射mysql中的某个database,并且会自动在ClickHouse中创建对应的ReplacingMergeTree,它能将直接将监听的binlog事件直接导入clickhouse中,不再使用第三方中间件。
- 在创建database后会全量同步mysql中的表和数据,之后会通过binlog进行增量同步
- 会为创建的每张ReplacingMergeTree自动的增加_sign(标记是否被删除,取值为1和-1)和_version(监听增删改事件,若发生则自增)字段
MySQL 开启 binlog 和 GTID 模式
!!!注意数据库的版本,建议最好用mysql8.0的版本,不然很可能会报code 537错误
进入/etc/my.cnf中添加信息
开启binlog
开启GTID模式
确保数据同步的一致性
配置mysql的default_authentication_plugin,为了clickhouse可以建表
default_authentication_plugin = mysql_native_password
修改好后重启mysql服务
[root@spark01 etc]# systemctl restart mysqld
测试
准备MySQL 表和数据
clickhouse开启物化视图
set allow_experimental_database_materialize_mysql=1;
ClickHouse 中创建 MaterializeMySQL 数据库
CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
ENGINE = MaterializedMySQL(‘host:port’, [‘database’ | database], ‘user’, ‘password’) [SETTINGS …]
CREATE DATABASE test_binlog ENGINE = MaterializeMySQL('192.168.124.26:3306','mybatis','root','123456789');
查看映射情况
插入数据测试
在mysql中插入一条数据
删除测试
删除成功
从表中并不能看见 _sign 和 _version这两个字段,是因为这两个字段都是隐藏的,想要查看的话就得自己加上该条件
可以看见它只是将插入和删除的数据进行了标记,并不是真正意义上讲数据删除或更新
整合MySQL表
和整合数据库的操作类似只是命令不同
CREATE TABLE [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster]
(
name1 [type1] [DEFAULT|MATERIALIZED|ALIAS expr1] [TTL expr1],
name2 [type2] [DEFAULT|MATERIALIZED|ALIAS expr2] [TTL expr2],
...
) ENGINE = MySQL('host:port', 'database', 'table', 'user', 'password'[, replace_query, 'on_duplicate_clause'])
SETTINGS
[connection_pool_size=16, ]
[connection_max_tries=3, ]
[connection_auto_close=true ]
;