canal是用java开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件。目前,canal
主要支持了MySQL的binlog解析,解析完成后才利用canal client 用来处理获得的相关数据。
因此mysql数据库必须开启binlog,查看是否开启:
show variables like 'log_bin'; -- 查看是否开启binlog功能
修改mysql配置文件,开启binlog功能
vi /etc/my.cnf
# 追加内容
log-bin=mysql-bin #binlog文件名
binlog_format=row #binlog模式 格式有三种,分别是STATEMENT、MIXED、ROW ;STATEMENT节省空间,会造成数据丢失,ROW 数据不会丢失,但是占用空间,MIXED 前两者的综合,但还有极个别情况数据会丢失
server-id=1 #mysql实例id,不能与canal的slaveId重复
# binlog-do-db=test #对哪个库起作用
重启mysql
service mysql restart 或systemctl restart mysqld
查看当前创建用户密码的要求
SHOW VARIABLES LIKE 'validate_password%';
set global validate_password_policy=LOW; # 设置密码格式
set global validate_password_length=5; # 设置密码长度
创建同步用户canal
create user 'canal'@'%' IDENTIFIED by 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
查看用户是否创建成功
use mysql;
select host, user from user;
canal下载地址:https://github.com/alibaba/canal/releases
上传下载好的压缩文件:canal.deployer-1.1.4.tar.gz 到/usr/local/canal,然后解压
tar -zxvf canal.deployer-1.1.4.tar.gz
修改配置文件
vi conf/example/instance.properties
#数据库信息
canal.instance.master.address=192.168.96.127:3306
#数据库用户和密码
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
#数据库表同步规则
canal.instance.filter.regex=.*\\..*
mysql数据解析关注的表,perl正则表达式。
多个正则直接以逗号(,)分割,转义符需要双斜杠(\\)
例子:
1、所有表: .* or .*\\..*
2、canal schema 下所有表:canal\\..*
3、canal下的以canal开头的表:canal\\.canal.*
4、canal schema下的一张表:canal.test
5、多个规则组合使用:canal\\..*,mysql.test1,myslq.test2 (此过滤条件只针对row模式的数据有效)
启动,bin目录下
sh bin/startup.sh
启动成功后,可以在logs目录找到日志,查看启动状态: