拉取canal镜像

  1. docker pull canal/canal-server

启动canal镜像

  1. #启动镜像
  2. docker run --name canal -d canal/canal-server

配置文件

  1. #进入容器 查看配置文件路径
  2. docker exec -it canal bash
  3. #找到文件位置后 exit退出容器 将容器内部文件copy到外部
  4. docker cp canal:/home/admin/canal-server/conf/canal.properties D:\dev\docker\cp\canal
  5. docker cp canal:/home/admin/canal-server/conf/example/instance.properties D:\dev\docker\cp\canal

配置canal

修改 canal.properties 文件,配置输出到 RabbitMQ,有以下几处要改

  1. # 指定 RabbitMQ
  2. canal.serverMode = rabbitMQ
  3. # RabbitMQ 配置
  4. rabbitmq.host = 10.152.3.78
  5. rabbitmq.virtual.host = /
  6. rabbitmq.exchange = canal.exchange
  7. rabbitmq.username = admin
  8. rabbitmq.password = admin
  9. rabbitmq.deliveryMode = topic

接下来修改 instance.properties 文件

  1. # MySQL 地址 + 端口
  2. canal.instance.master.address=10.152.3.78:3306
  3. canal.instance.dbUsername=canal
  4. canal.instance.dbPassword=canal
  5. # 对应到 RabbitMQ 的话是 Routing key
  6. canal.mq.topic=canal.routing.key

监听指定数据库

修改 instance.properties 文件

  1. # table regex
  2. #canal.instance.filter.regex=.*\\..*
  3. canal.instance.filter.regex=a_db\\..*,test_db\\..*

重启canal

修改完成后,将之前的canal容器关闭,重新起一个新的容器

  1. #关闭容器
  2. docker stop canal
  3. #移除容器
  4. docker rm canal

启动新的 这里-v是将外部的文件挂载到容器内部 这样就不用每次启动都要配置参数了

  1. 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

  1. CREATE USER canal IDENTIFIED BY 'canal';
  2. GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
  3. -- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
  4. FLUSH PRIVILEGES;

MySQL开启binlog

1、查看binlog是否开启

  1. show variables like 'log_%';

2、查找配置文件:find / -name my.inf,我这边目录是/etc/my.cnf
3、修改my.cnf文件:vim /etc/my.cnf

  1. [mysqld]
  2. log-bin=mysql-bin # 开启 binlog
  3. binlog-format=ROW # 选择 ROW 模式
  4. server_id=1001 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

3、重启MySQL

  1. systemctl restart mysqld.service