Canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL。
原理和应用场景参考:Canal——原理架构及应用场景
Canal环境搭建
Canal的原理是基于mysql binlog
技术,所以这里一定需要开启mysql的binlog写入功能
1、检查binlog功能是否有开启
show variables like 'log_bin';
如果value为OFF
则表示未开启。
2、开启binlog功能
1、修改 mysql 的配置文件 my.cnf
vi /etc/my.cnf
追加以下内容
# binlog文件名
log-bin=mysql-bin
# 选择row模式
binlog_format=ROW
# mysql实例id,不能和canal的slaveId重复
server_id=1
2、重启MySQL服务
systemctl restart mysqld.service
3、查看是否开启成功
3、下载安装Canal服务
下载地址:Canal的GitHub地址
1、我这里将它放在/usr/local/canal
目录下,将其解压
cd /usr/local/canal
tar zxvf canal.deployer-1.1.4.tar.gz
2、修改instance.properties
配置文件
cd /usr/local/canal/conf/example
vi instance.properties
修改本机数据库的address
修改数据库信息,建议创建一个新用户并授权,或是给root用户授权。
修改表的匹配规则,这表示guli_edu数据库中的member表
表的匹配规则
mysql 数据解析关注的表,Perl正则表达式.
多个正则之间以逗号(,)分隔,转义符需要双斜杠(\\)
常见例子:
1.所有表:.* or .*\\..*
2.canal schema下所有表: canal\\..*
3.canal下的以canal打头的表:canal\\.canal.*
4.canal schema下的一张表:canal.test1
5.多个规则组合使用:canal\\..*,mysql.test1,mysql.test2 (逗号分隔)
注意:此过滤条件只针对row模式的数据有效(ps. mixed/statement因为不解析sql,所以无法准确提取tableName进行过滤)
4、启动Canal
cd /usr/local/canal/bin
./startup.sh
SpringBoot代码
1、引入相关依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--mysql-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>commons-dbutils</groupId>
<artifactId>commons-dbutils</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<!-- 主要是这个依赖 -->
<dependency>
<groupId>com.alibaba.otter</groupId>
<artifactId>canal.client</artifactId>
</dependency>
2、书写配置文件
# 服务端口
server.port=10000
# 服务名
spring.application.name=canal-client
# 环境设置:dev、t