ClickHouse作为OLAP分析引擎已经被广泛使用,数据的导入导出是用户面临的第一个问题。由于ClickHouse本身无法很好地支持单条大批量的写入,因此在实时同步数据方面需要借助其他服务协助。本文给出一种结合Canal+Kafka的方案,并且给出在多个MySQL实例分库分表的场景下,如何将多张MySQL数据表写入同一张ClickHouse表的方法,欢迎大家批评指正
我的需求就是将mysql多张表的数据实时同步到clickhouse中,参考了很多网上的资料,写的都不是很好,有的配置完成后,就会报错,今天终于实现了该功能,分享给大家。
我主要利用canal来实现ClickHouse实时同步MySQL数据,本次不考虑接入kafka等mq
- 配置mysql
- canal安装配置
- canal-client安装配置
- 创建clickhouse的数据库和表
- 结果展示
1. 配置mysql
开启binlog
# mysql配置文件/etc/my.cnf添加下面配置
vi /etc/my.cnf
#插入下面内容
server-id = 1
log_bin = /var/lib/mysql/bin.log
binlog-format = row # very important if you want to receive write, update and delete row events
# optional
expire_logs_days = 30
max_binlog_size = 768M
# setup listen address
bind-address = 0.0.0.0
新增同步账号
#登陆mysql,执行下面命令,创建账号aaa,密码为123456
CREATE USER 'maxwell'@'%' IDENTIFIED BY '123456';
GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE ON *.* TO 'maxwell'@'%';
flush privileges;
2. canal安装配置
下载 canal, 访问 release页面 , 选择需要的包下载, 如以 1.1.4 版本为例
#下载canalan安装包
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz
#解压到指定目录
mkdir -p /usr/tool/canal
tar zxvf canal.deployer-1.1.4.tar.gz -C /usr/tool/canal
#解压后进入目录,结构如下
drwxr-xr-x 7 awwzc staff 238 12 14 23:34 bin
drwxr-xr-x 9 awwzc staff 306 12 14 23:32 conf
drwxr-xr-x 83 awwzc staff 2822 12 14 23:30 lib
drwxr-xr-x 4 awwzc staff 136 12 14 23:34 logs
# canal启动时会读取conf目录下面的文件夹,当作instance,进入conf目录下复制example文件夹
cp -R example/ maxwell/
#移除example文件夹
mv -rf example
#修改canal.properties(一定要修改)
# instance列表,conf目录下必须有同名的目录
canal.destinations = maxwell
#修改maxwell文件夹下面的instance.properties文件下面几项为你自己的数据库配置即可
vi conf/maxwell/instance.properties
# position info
canal.instance.master.address=192.168.0.102:3306
# username/password
canal.instance.dbUsername=maxwell
canal.instance.dbPassword=123456
# 启动,安装目录下执行以下命令,server,instance出现下面日记说明启动成功
bin/startup.sh
# 查看server日记,会出现以下日记
tail -200f logs/canal/canal.log
2019-1