本文计划配置源端192.168.144.246的baidd库到目标端192.168.144.248 baidd库的canal同步。
一 准备工作
1.1 在源端和目标端创建数据库
create database baidd;
1.2 在源端创建canal用户
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%' IDENTIFIED BY 'canal';
1.3 在目标端创建对目标库有操作权限的用户
GRANT ALL PRIVILEGES ON *.* TO 'baidd'@'%' IDENTIFIED BY '123456';
二 配置canal instance
可登录canal admin管理界面创建instance:
点击下三角,选择instance所属canal server:
点击‘载入模板’:
注意修改以下几项:
若只同步几个表,可显示指定,不同表名之间用逗号分隔,示例:
canal.instance.filter.regex=baidd.t1,baidd.t2
注意,表名前后不能有空格,否则不会同步该表。
另外还有一个地方需要注意:
canal.instance.master.journal.name=master-bin.000001 #表示从哪个binlog开始复制
canal.instance.master.position=1984 #表示从哪个postion开始复制
只有第一次配置该canal instance的时候需要指定binlog文件名和位置,后续不管这两个参数是否有配置,canal不会再从该配置中读binlog文件位置,而是会自动从上次复制的位置继续复制(/opt/canal-server/conf/实例名/meta.dat)。
点击‘保存’创建instance。
#查看日志是否有报错:
有如下输出,说明开始正常同步:
2021-04-03 00:37:37.128 [destination = baidd-test , address = /192.168.144.246:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> begin to find start position, it will be long time for reset or first position
2021-04-03 00:37:38.893 [destination = baidd-test , address = /192.168.144.246:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - prepare to find start position master-bin.000001:1386:1617380063000
2021-04-03 00:37:39.692 [destination = baidd-test , address = /192.168.144.246:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> find start position successfully, EntryPosition[included=false,journalName=master-bin.000001,position=1386,serverId=1,gtid=,timestamp=1617380063000] cost : 2526ms , the next step is binlog dump
三 配置canal client
3.1 配置rdb文件
cd /opt/canal-client/conf/rdb
vi baidd-test.yml
# Mirror schema synchronize config
dataSourceKey: defaultDS
destination: baidd-test
groupId: g1
outerAdapterKey: baidd-test
concurrent: true
dbMapping:
mirrorDb: true
database: baidd
3.2 配置aplication.yml
cd /opt/canal-client/conf
vi application.yml
server:
port: 15505
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
default-property-inclusion: non_null
canal.conf:
mode: tcp # kafka rocketMQ
canalServerHost: 192.168.144.248:11111
# zookeeperHosts: slave1:2181
# mqServers: 127.0.0.1:9092 #or rocketmq
# flatMessage: true
batchSize: 500
syncBatchSize: 1000
retries: 0
timeout:
accessKey:
secretKey:
canalAdapters:
# 示例:
- instance: baidd-test # canal instance Name or mq topic name
groups:
- groupId: g1
outerAdapters:
- name: logger
# - name: rdb
# key: 同rdb文件的outerAdapterKey保持一致
# properties:
# jdbc.driverClassName: com.mysql.jdbc.Driver
# jdbc.url: jdbc:mysql://目标库ip:端口/库名?useUnicode=true&characterEncoding=utf-8
# jdbc.username: 对目标库有权限的用户
# jdbc.password: 密码
- name: rdb
key: baidd-test
properties:
jdbc.driverClassName: com.mysql.jdbc.Driver
jdbc.url: jdbc:mysql://192.168.144.248:3306/baidd?useUnicode=true&characterEncoding=utf-8
jdbc.username: baidd
jdbc.password: 123456
#检查日志是否有报错
cd /opt/canal-client/logs/adapter
less adapter.log
四 验证数据同步
#在源端建表
USE baidd;
CREATE TABLE t1(id INT PRIMARY KEY,NAME VARCHAR(30));
INSERT INTO baidd.t1(id,NAME) VALUES(1,'dan');
#在目标端查询