前言
clickhouse的查询速度非常快,而且兼容大部分MySQL的sql语法,因此一般将clickhouse作为MySQL的读库。
本文提供两种clickhouse同步MySQL的方式
- clickhouse版本:21.2.4.6
- MySQL版本:8.0.22
使用MySQL引擎
nil
使用MaterializedMySQL引擎
目前(2022年7月25日)这还只是个实验功能。
配置MySQL
- 修改MySQL的配置文件,启用gtid,binlog等
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql secure-file-priv= character_set_server = utf8mb4 max_connections=5000 max_user_connections=3000 transaction_isolation=READ-COMMITTED wait_timeout=300 default-time_zone='+8:00' server_id=1 expire_logs_days=5 binlog-format=row # 指定需要同步的数据库 binlog-do-db=testdb enforce-gtid-consistency=on log-slave-updates=on gtid-mode=on default_authentication_plugin=mysql_native_password
- 在MySQL创建用于同步的账号
配置clickhouse
-- 启用MaterializeMySQL引擎的功能 set allow_experimental_database_materialized_mysql = 1; -- 指定MySQL的IP、端口、数据库、同步用户及其密码,同步用户需要有主从复制的权限 -- 使用materialized_mysql_tables_list指定需要同步的数据表,该参数只有新版(至少v22)才官方支持 CREATE DATABASE testdb1_ch ENGINE = MaterializeMySQL('192.168.0.10:3306', 'testdb1', 'syncuser', 'syncpass') SETTINGS materialized_mysql_tables_list='table1,table2';
配置完成后直接测试即可。