1.修改 my.cnf
或 my.ini
(windows), 添加配置项:
# 打开binlog
log-bin=mysql-bin
# 选择ROW(行)模式
binlog-format=ROW
# 配置MySQL replaction需要定义,不要和canal的slaveId重复
server_id=1
2.重启 mysql 服务后, 查看配置变量是否生效:
+---------------------------------+----------------------+
| Variable_name | Value |
+---------------------------------+----------------------+
| log_bin | ON |
| log_bin_basename | D:\env\mysql-5 |
| log_bin_index | D:\env\mysql-5.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+----------------------+
6 rows in set, 1 warning (0.00 sec)
1.2.1. 引入依賴
org.springframework.cloud
spring-cloud-starter-stream-rabbit
1.2.2. 配置文件
spring:
cloud:
stream:
bindings:
## output
cannal_channel:
destination: cannal_channel
## 死信配置和消費group一致
producer:
requiredGroups: ${spring.application.name}
## input
cannal_channel_input:
destination: cannal_channel
## 消費分組
group: ${spring.application.name}
## 重試
consumer:
max-attempts: 1
rabbit:
bindings:
cannal_channel_input:
consumer:
#这个参数为true的时候会自动为当前的队列创建一个死信队列,以dlq结尾
auto-bind-dlq: true
# 进入死信时携带错误消息
republish-to-dlq: true
1.2.3. 创建绑定接口
public interface CannalBinding {
@Output("cannal_channel")
MessageChannel channel();
String CHANNEL_INPUT = "cannal_channel_input";
@Input(CHANNEL_INPUT)
MessageChannel channelInput();
}
1.2.4. 创建监听
@Slf4j
@EnableBinding({CannalBinding.class})
@Service("CannalService")
public class CannalService {
@Autowired
private CannalBinding cannalBinding;
@StreamListener(CannalBinding.CHANNEL_INPUT)
private void receiver(Object message) {
System.out.println("template" + message.toString());
JSONObject jsonObject = JSONObject.parseObject(message.toString());
// if (Objects.nonNull(jsonObject)) {
// throw new ApiException("特殊报错的");
// }
}
}
1.2.5. 启动程序 rabbitmq里就会自动创建好监听的交换机和队列
sudo wget https://github.com/alibaba/canal/releases/download/canal-1.1.5-alpha-1/canal.deployer-1.1.5-SNAPSHOT.tar.gz
sudo tar -zxvf canal.deployer-1.1.5-SNAPSHOT.tar.gz
1.3.2.1. 节点配置文件 canal.properties
canal.ip = 192.168.2.108
# register ip to zookeeper, 注册到 ZK 的 IP 地址, 如下图1.
canal.register.ip = 192.168.2.108
canal.zkServers = zk集群
# tcp, kafka, RocketMQ, 最新版本 1.1.5 可以直接连接 rabbitmq
canal.serverMode = rabbitmq
# destinations, 当前 server 上部署的 instance 列表, 对应各个实例文件夹(../conf/)名称
canal.destinations = example
# 设置 mq 服务器地址, 此处为 rabbitmq 的服务器地址
# !! 此处下载后默认的配置是有配置IP:端口的
# rabbitmq 此处则不需要配置端口
canal.mq.servers = 192.168.208.100
# 一下几项均为 1.1.5 新版本新增支持 rabbitmq 的配置
canal.mq.vhost=/
canal.mq.exchange=cannal_channel # 指定 rabbitmq 上的 exchange 名称
canal.mq.username=admin # 连接 rabbitmq 的用户名
canal.mq.password=**** # 连接 rabbitmq 的密码
canal.mq.aliyunuid=
1.3.2.2. 实例配置文件 instance.properties
# position info, 数据库的连接信息
canal.instance.master.address=192.168.2.108:3306
# 以下两个配置, 需要在上面配置的 address 的数据库中执行 `SHOW MASTER STATUS` 获取的 `File` 和 `Position` 两个字段值
canal.instance.master.journal.name=mysql-bin.00001
canal.instance.master.position=674996
# table meta tsdb info, 禁用 tsdb 记录 table meta 的时间序列版本
canal.instance.tsdb.enable=false
# username/password, 实例连接数据的用户名和密码
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
# table regex, 正则匹配需要监听的数据库表
canal.instance.filter.regex=ysb\\.useropcosttimes_prod
# mq config, 指定 rabbitmq 设置绑定的路由 #代表全部
canal.mq.topic=#
Linux 对应的启动脚本 ./bin/startup.sh
, Windows 对应的启动脚本 ./bin/startup.bat
1、https://www.jb51.net/article/207089.htm