目录
前言
官网:GitHub - alibaba/canal: 阿里巴巴 MySQL binlog 增量订阅&消费组件
一、配置mysql
1、my.cnf添加参数
[mysqld]
log-bin=/var/lib/mysql/mysql-bin
binlog_format=row
binlog-do-db=数据库名称
参数说明
log-bin: 设置binary log存放位置 "/var/lib/mysql" 及文件名称 "mysql-bin"。
binlog_format: 数据存储格式
binlog-do-db: 数据库名称(多个数据库使用逗号 (,) 隔开)
2、重启mysql
docker restart mysql
3、连接数据库
4、查看binlog是否开启
SHOW VARIABLES LIKE 'log_bin';
5、设置用户权限
CREATE USER 'canal'@'%' IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT, SUPER ON *.* TO 'canal'@'%';
FLUSH PRIVILEGES;
二、安装canal
1、拉取镜像文件
docker pull canal/canal-server
2、启动
docker run -d \
--restart=always --name canal -p 11111:11111 \
-e canal.destinations=实例名称 \
-e canal.instance.master.address=127.0.0.1:3306 \
-e canal.instance.dbUsername=canal \
-e canal.instance.dbPassword=canal \
-e canal.instance.connectionCharset=UTF-8 \
-e canal.instance.tsdb.enable=true \
-e canal.instance.gtidon=false \
-e canal.instance.filter.regex=数据库名称\\.表名 \
canal/canal-server
参数说明
canal.instance.filter.regex: 要监听的表,正则表达式,多个规则使用逗号 (,) 隔开,转义符使用双斜杠(\\)
常用举例:
1. 所有表: .* 或 .*\\..*
2. canal数据库里所有表: canal\\..*
3. canal数据库里以canal开头的表: canal\\.canal.*
4. 多个规则使用逗号隔开: canal\\..*,mysql\\..*
三、Springboot集成canal
1、引入依赖
<dependency>
<groupId>top.javatool</groupId>
<artifactId>canal-spring-boot-starter</artifactId>
<version>1.2.1-RELEASE</version>
</dependency>
2、添加配置
canal:
destination: 实例名称
server: canal部署的ip:11111
3、在实体类添加注释
import org.springframework.data.annotation.Id;
public class GoodsStock {
@Id
private Long id;
/**
* 实体类与数据库中字段名不一致时,填写数据库中字段名
*/
@Column(name = "stock_quantity")
private Integer stock;
/**
* 数据库表中不存在的字段
*/
@Transient
private Integer sold;
}
4、缓存处理
// 数据库表名
@CanalTable("goods_stock")
@Component
public class GoodsStockCanalHandler implements EntryHandler<GoodsStock> {
@Override
public void insert(GoodsStock goodsStock) {
// 插入
}
@Override
public void update(GoodsStock before, GoodsStock after) {
// 修改
}
@Override
public void delete(GoodsStock goodsStock) {
// 删除
}
}