原文
1.1. 开启 MySQL 的 binlog 日志修改 my.cnf 或 my.ini(windows), 添加配置项:
# binlog 日志存放路径 log-bin=D:\env\mysql-5.7.28-winx64\binlog # 日志中记录每一行数据被修改的形式 binlog-format=ROW # 当前机器的服务 ID, 如果为集群时不能重复 server_id=1重启 mysql 服务后, 查看配置变量是否生效:
mysql> show variables like '%log_bin%'; +---------------------------------+----------------------+ | 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)配置 mysql 数据库的 canal 用户
mysql -uroot -p 登录 mysql, 创建并授权用户 canal;
CREATE USER canal IDENTIFIED BY 'canal'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; FLUSH PRIVILEGES; 1.2. 配置 rabbitmq Exchanges 和 Queues新建 Queue
新建 Exchange
设置 Queue 里的 Bindings, 填写 Exchange 名称, 以及路由 Routing key;
1.3. 安装单机 canal 1.3.1. 下载安装下载 并解压缩;
sudo wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz sudo tar -zxvf canal.deployer-1.1.4.tar.gz最新版本 1.1.5的安装
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.3.2.1. 节点配置文件 canal.properties # tcp bind ip, 当前节点的 IP 地址 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/<instance_name>)名称 canal.destinations = example2 # 设置 mq 服务器地址, 此处为 rabbitmq 的服务器地址 # !! 此处下载后默认的配置是有配置IP:端口的 # rabbitmq 此处则不需要配置端口 canal.mq.servers = 192.168.208.100 # 一下几项均为 1.1.5 新版本新增支持 rabbitmq 的配置 canal.mq.vhost=http://www.likecs.com/ canal.mq.exchange=example2-ex # 指定 rabbitmq 上的 exchange 名称, "新建 `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-5.7 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 设置绑定的路由, 详见"配置rabbitmq"步骤里的第三步配置的`Routing key` canal.mq.topic=example2-routingkey 1.3.3. 启动 canal 服务Linux 对应的启动脚本 ./bin/startup.sh, Windows 对应的启动脚本 ./bin/startup.bat; 以 Windows 为例:
λ .\startup.bat start cmd : java -Xms128m -Xmx512m -XX:PermSize=128m -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dapplication.codeset=UTF-8 -Dfile.encoding=UTF-8 -server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=9099,server=y,suspend=n -DappName=otter-canal -Dlogback.configurationFile="d:\env\green\canal-1.1.5\bin\\..\conf\logback.xml" -Dcanal.conf="d:\env\green\canal-1.1.5\bin\\..\conf\canal.properties" -classpath "d:\env\green\canal-1.1.5\bin\\..\conf\..\lib\*;d:\env\green\canal-1.1.5\bin\\..\conf" java -Xms128m -Xmx512m -XX:PermSize=128m -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dapplication.codeset=UTF-8 -Dfile.encoding=UTF-8 -server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=9099,server=y,suspend=n -DappName=otter-canal -Dlogback.configurationFile="d:\env\green\canal-1.1.5\bin\\..\conf\logback.xml" -Dcanal.conf="d:\env\green\canal-1.1.5\bin\\..\conf\canal.properties" -classpath "d:\env\green\canal-1.1.5\bin\\..\conf\..\lib\*;d:\env\green\canal-1.1.5\bin\\..\conf" com.alibaba.otter.canal.deployer.CanalLauncher Java HotSpot(TM) Server VM warning: ignoring option PermSize=128m; support was removed in 8.0 Listening for transport dt_socket at address: 9099最后手动修改数据库数据, 或者等待其他的修改, 再查看一下 rabbitmq 上的监控即可知道流程是否走通了.