MySQL的数据怎样同步到ClickHouse?

科技   2024-06-17 16:30   上海  

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 = onenforce_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-utilsyum-config-manager --add-repo https://packages.clickhouse.com/rpm/clickhouse.repoyum install -y clickhouse-server clickhouse-client

修改ClickHouse配置文件

vim /etc/clickhouse-server/config.xml

调整参数:

<listen_host>0.0.0.0</listen_host>

启动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的券,另外还有一个随机红包,应该也会有几十元,然后还可以私聊我领一张额外叠加券。



MySQL数据库联盟
关注后,回复“高可用”,可获取8篇MySQL高可用文章
 最新文章