前言
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';
配置完成后直接测试即可。