MySQL,作为一款广泛使用的行式关系型数据库,虽然在事务处理和数据一致性方面表现出色,但在处理大规模数据分析时可能会遇到性能瓶颈。
而ClickHouse,作为一款高性能的列式数据库,专为在线分析处理(OLAP)设计,能够提供快速的查询响应和高效的数据处理能力。
所以,越来越多的公司考虑把MySQL的数据同步到ClickHouse,再到ClickHouse里处理复杂分析和聚合操作。
MySQL的数据同步到ClickHouse有很多方案,我们这一篇文章就来聊一下最简单的一种:通过MaterializedMySQL库引擎。
ClickHouse服务器作为MySQL副本工作。它读取Binlog并执行DDL和DML。
不过官方提醒,这个还是实验版本,不建议在生产环境使用。
个人见解:真要使用,可以增加一些校验方式,来判断MySQL和ClickHouse数据是否一致。
1 MySQL需要调整的配置
default_authentication_plugin = mysql_native_password
因为MaterializedMySQL库引擎只能识别这个认证方式。
gtid_mode = on
enforce_gtid_consistency = on
只能解析基于GTID的Binlog记录。
2 MySQL中写入测试数据
create database test02;
create table test02.t2(
`id` int NOT NULL AUTO_INCREMENT,
`a` int DEFAULT NULL,
`b` int DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB;
insert into test02.t2(a,b) values (1,1);
3 MySQL中创建测试用户
create user 'test02_rw'@'192.168.%' identified with mysql_native_password by 'IdcaTa6Q^d';
grant all on *.* to 'test02_rw'@'192.168.%';
4 ClickHouse安装和启动
安装ClickHouse单机版
yum install -y yum-utils
yum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repo
yum install -y clickhouse-server clickhouse-client
修改ClickHouse配置文件
vim /etc/clickhouse-server/config.xml
调整参数:
0.0.0.0
启动ClickHouse
/etc/init.d/clickhouse-server start
5 ClickHouse中创建MaterializedMySQL库引擎
set allow_experimental_database_materialized_mysql = 1;
create database m_mysql_test engine=MaterializedMySQL('192.168.12.161:3306','test02','test02_rw','IdcaTa6Q^d');
其中:
allow_experimental_database_materialized_mysql,表示开启MySQL物化引擎;
192.168.12.161:3306,MySQL的IP和端口
test02,要同步的MySQL库
test02_rw,MySQL中的用户
IdcaTa6Q^d,MySQL用户的密码
6 再到ClickHouse中查询
select * from m_mysql_test.t2;
7 MySQL中写入增量数据
insert into test02.t2(a,b) values (2,2);
8 再到ClickHouse中查询增量数据
select * from m_mysql_test.t2;
说明增量数据也可以正常同步。
好的,通过MaterializedMySQL库引擎把MySQL的数据同步到ClickHouse就聊到这里。
更多ClickHouse内容,可以观看我的DBA体系课近期更新的ClickHouse部分:
考虑购买DBA体系课的,在本月20日前,可领一张满1800减600的券,另外还有一个随机红包,应该也会有几十元,然后还可以私聊我领一张额外叠加券。