拉取canal镜像
docker pull canal/canal-server
启动canal镜像
#启动镜像docker run --name canal -d canal/canal-server
配置文件
#进入容器 查看配置文件路径docker exec -it canal bash#找到文件位置后 exit退出容器 将容器内部文件copy到外部docker cp canal:/home/admin/canal-server/conf/canal.properties D:\dev\docker\cp\canaldocker cp canal:/home/admin/canal-server/conf/example/instance.properties D:\dev\docker\cp\canal
配置canal
修改 canal.properties 文件,配置输出到 RabbitMQ,有以下几处要改
# 指定 RabbitMQcanal.serverMode = rabbitMQ# RabbitMQ 配置rabbitmq.host = 10.152.3.78rabbitmq.virtual.host = /rabbitmq.exchange = canal.exchangerabbitmq.username = adminrabbitmq.password = adminrabbitmq.deliveryMode = topic
接下来修改 instance.properties 文件
# MySQL 地址 + 端口canal.instance.master.address=10.152.3.78:3306canal.instance.dbUsername=canalcanal.instance.dbPassword=canal# 对应到 RabbitMQ 的话是 Routing keycanal.mq.topic=canal.routing.key
监听指定数据库
修改 instance.properties 文件
# table regex#canal.instance.filter.regex=.*\\..*canal.instance.filter.regex=a_db\\..*,test_db\\..*
重启canal
修改完成后,将之前的canal容器关闭,重新起一个新的容器
#关闭容器docker stop canal#移除容器docker rm canal
启动新的 这里-v是将外部的文件挂载到容器内部 这样就不用每次启动都要配置参数了
docker run --name canal -p 11111:11111 -d -v D:\dev\docker\cp\canal\instance.properties:/home/admin/canal-server/conf/example/instance.properties -v D:\dev\docker\cp\canal\canal.properties:/home/admin/canal-server/conf/canal.properties canal/canal-server
这样canal基本的配置完成了,但是mysql也需要配置,这里简单说明下。对mysql中 my.cnf文件进行修改,开启binglog。需要注意的是server_id和canal中canal.properties中的id一定要不同,切记
MySQL账号
授权 canal 链接 MySQL 账号具有作为 MySQL slave 的权限, 如果已有账户可直接 grant
CREATE USER canal IDENTIFIED BY 'canal';GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;FLUSH PRIVILEGES;
MySQL开启binlog
1、查看binlog是否开启
show variables like 'log_%';
2、查找配置文件:find / -name my.inf,我这边目录是/etc/my.cnf
3、修改my.cnf文件:vim /etc/my.cnf
[mysqld]log-bin=mysql-bin # 开启 binlogbinlog-format=ROW # 选择 ROW 模式server_id=1001 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复
3、重启MySQL
systemctl restart mysqld.service
