1、下载canal的各个组件canal-server
、canal-adapter
下载地址Releases · alibaba/canal · GitHub
2、修改mysql配置文件
canal会模拟MySQL主库和从库的交互协议,从而伪装成MySQL的从库,然后向MySQL主库发送dump协议,MySQL主库收到dump请求会向canal推送binlog,canal通过解析binlog将数据同步到其他存储中去。
修改mysql配置文件 开启binlog日志,并且以ROW方式,开启主从模式 以及logbin的文件位置 如下:
记得重启下mysql 查看MySQL配置是否开启
SHOW VARIABLES LIKE 'binlog-format'; -- 结果应该是ROW
SHOW VARIABLES LIKE 'log_bin'; -- 结果应该是 ON
SHOW VARIABLES LIKE '%log%'; -- 所有binlog信息
创建一个给canal用的一个用户
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
3、canal-server(canal.deployer-1.1.6)
解压修改配置
canal-server的配置在\canal.deployer-1.1.6\conf\example文件下的instance.properties
修改了其中
# username/password
canal.instance.dbUsername=root
canal.instance.dbPassword=123456
bin目录下运行startup.bat
canal.deployer-1.1.6\logs\example下查看example.log
canal.deployer启动
成功
4、canal-adapter解压修改配置
canal-adapter的配置文件在canal.adapter-1.1.6\conf文件下的application.yml
注意127.0.0.1:9200前要加http://
在canal.adapter-1.1.6\conf\es6文件下创建yml文件
name_index索引要提前在es中设置好
bin目录下startup.bat
启动成功adapter.log
全量同步dao
curl http://localhost:8081/etl/es6/name.yml -X POST
新增修改mysql会同步到es,adapter.log会打印出修改日志,
遇到的几个问题
1、如果adapter.log会打印出修改数据库的日志,只能全量同步,不能增量同步。
将instance.properties中的
canal.instance.filter.regex=.*\\..*试试。
2、llegalArgumentException: Illegal character in scheme name at index 0: 127.0.0.1:9200
3、destination:example[java.io.IOException: Received error packet: errno = 1236, sqlstate = HY000 errmsg = Could not find first log file name in binary log index file
MySQL中show master status;
执行
reset master;
flush logs;
删除canal.deployer-1.1.6\conf\example文件下meta.dat文件后重启