clickhouse 同步mysql数据
1、mysql端
1.1、配置mysql启动二进制复制
vim /etc/my.conf
在[mysqld]下添加
[mysqld]
server-id=1
log-bin=mysql-bin
binlog_format=ROW
gtid_mode = ON
enforce_gtid_consistency = ON
default_authentication_plugin=mysql_native_password
修改配置需要重启mysql服务
1.2、创建SLAVE账户
登录mysql,使用mysql数据库添加replica用户给clickhouse复制数据
>use mysql;
>CREATE USER 'replica'@'%' IDENTIFIED BY '密码';
>ALTER user 'replica'@'%' IDENTIFIED BY '密码' PASSWORD EXPIRE NEVER;(可以不执行)
>ALTER user 'replica'@'%' IDENTIFIED WITH mysql_native_password BY '密码';(可以不执行)
>GRANT REPLICATION SLAVE,REPLICATION CLIENT,RELOAD,SELECT ON *.* TO 'replica'@'%';(REPLICATION SLAVE 的级别是global,不能只作用于某一数据库,而是全局,一定要写 *.* ,如果要限制数据库只能去/etc/my.cnf中设置,添加binlog-do-db=数据库名 来限制主从复制的数据库)
>FLUSH PRIVILEGES;
以上是mysql的配置
2、clickhouse端
2.1、设置数据存储目录(只有一个磁盘或者a盘够大的可直接跳过)
创建一个存放数据的目录
mkdir -p /data/clickhouse/tmp
chown -R clickhouse:clickhouse /data/clickhouse
修改/etc/clickhouse-server/config.xml 文件中的数据目录设置,找到 <path>
和 <tmp_path>
标签,并更改为新的目录路径
<!-- Path to data directory, with trailing slash. --> <path>/app/clickhouse/</path>
<tmp_path>/data/clickhouse/tmp/</tmp_path>
如果默认数据存储的目录下有文件也要一并迁走: mv /var/lib/clickhouse/* /data/clickhouse/
修改配置文件记得重启clickhouse-server服务:/etc/init.d/clickhouse-server restart
2.2、clickhouse连接mysql
登录clickhouse-client
启用 MaterializedMySQL
引擎:SET allow_experimental_database_materialized_mysql = 1;(一次性的?设置过一次重新登录就要重新设置)
2.2.1 同步整个库
CREATE DATABASE 新建的clickhouse数据库名 ENGINE = MaterializedMySQL('mysql的IP:3306', '要同步的mysql数据库名', 'mysql中配置的可以复制数据的SLAVE用户', '数据库密码');
2.2.2 同步一张表
CREATE DATABASE 新建的clickhouse数据库名 ENGINE = MaterializedMySQL('mysql的IP:3306', '要同步的mysql数据库名, 'mysql中配置的可以复制数据的SLAVE用户', '数据库密码') SETTINGS materialized_mysql_tables_list = '单个表名';
3、验证是否成功
还是在clickhouse-client下查看
查看是否创建新的数据库:show datatables;
使用新创建的数据库:use 数据库名;
查看数据库中的表名:SHOW TABLES FROM 数据库名;
查看单张表的数据:select count(*) from 表名;(使用clickhouse都是千万级别的数据,建议直接查看数据量,否则刷屏容易死机)
参考:https://blog.csdn.net/u011197085/article/details/135227736