参考文档
https://clickhouse.tech/docs/en/engines/database-engines/materialize-mysql/
前言
MaterializeMySQL 于mysql引擎的主要区别在于,mysql引擎是不存储数据的,而MaterializeMySQL会把直接伪装成mysql的一个从库。给库中的每个表建立ReplacingMergeTreeengine表, 并实时同步mysql数据(当前版本还无法到完全同步),所以mysql需要开启binlog。
试一试
1,mysql开启binglog
sudo vi /etc/mysql/mysql.cnf
添加
[mysqld]
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
重启
sudo service mysql restart
查看binlog
sudo mysqlbinlog /var/log/mysql/mysql-bin.000001 |more
2,mysql开启GTID(主从同步用)
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';
#检测是否开启成功
show variables like 'gtid_mode';
show variables like 'ENFORCE_GTID_CONSISTENCY';
3,clickhouse 开启mysql物化
SET allow_experimental_database_materialize_mysql=1;
4,建库
CREATE DATABASE mysql_testDB ENGINE = MaterializeMySQL('xxxxx:3306', 'test', 'xxxx', 'xxxx')
5,查看
6,查看同步数据
--执行SQL
SELECT database,table, formatReadableSize ( sum( bytes ) ) AS size FROM system.parts WHERE active and database='mysql_testDB' GROUP BY database,table ORDER BY sum( bytes ) DESC
可以看到数据已经存储到了ck服务中。
总结
整体上来说,MaterializeMySQL是打通了mysql到ck高速公路,使用ck来接管mysql的数据分析,但是mysql和ck的数据同步还没有到mysql集群那样完善的程度。
1,不支持库和表级别的操作,表库修改后,只能重建。
2,有些mysql字段不一定ck支持。
3,第一次数据全量同步,然后后面做实时同步增量更新。
4,不支持级联操作。
5,mysql表数据的的update 和delete变化反馈为_sign和_version标识位的变化。
6,当前MaterializeMySQL只支持库级别的同步,不支持表级别同步
7,mysql ddl语句也相应受限
考虑到以上情况,如果是小表,且数据结构变化比较多,建议使用mysql引擎,如果是中大型表,且数据仅用于分析,数据结构变化少,强烈建议使用MaterializeMySQL。如果是超大型表比如上亿级别的数据量,还是建议通过第三方工具同步到ck直接建表分析。不过MaterializeMySQL在社区活跃迭代中,后期可待,不久的未来肯定可以说下mysql级别的成熟同步,哈哈
Tips
1,新版本clickhouse已经重命名为MaterializedMySQL