cannal整体分为订阅端和消费端即 canal-deployer 、 canal-adapter
首先是使用cannal-deployer订阅rds的二进制日志,然后配置canal-adapter 来消费日志
1、配置canal-deployer订阅rds
首先下载canal-deployer 到系统/canal目录
mkdir /canal
cd canal
wget https://github.com/alibaba/canal/releases/download/canal-1.1.3/canal.deployer-1.1.3.tar.gz
tar -zxvf canal.deployer-1.1.3.tar.gz
cd canal.deployer-1.1.3
目录下子目录功能
然后修改配置文件在这里目录 /oracle/cannal_server/conf/
这个目录下新建一个文件夹rds_test (注意tcp 模式这个文件夹名字是后面的instance Name,默认canal加载conf目录下的所有子目录的配置文件,并再消费端通过instanceId来区分接收消费哪个渠道来的数据。),然后把example 下的instance.properties 拷贝一份到rds_test cp ./example/instance.properties ./rds_test
然后进行编辑
表也可以test.mysql_test_1999c 这样配置
这样配置后就可以启动了(配置文件的作用:指定需要监控的 rds 实例。Canal 服务端伪装成 slave 进行日志的收集)
../bin/start.sh
2、配置消费端canal-adapter
cd /canal
wget https://github.com/alibaba/canal/releases/download/canal-1.1.3/canal.adapter-1.1.3.tar.gz
tar -zxvf canal.adapter-1.1.3.tar.gz
cd canal.adapter-1.1.3/conf
- 修改启动器配置: application.yml,
server:
port: 8081
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: 127.0.0.1:11111 #与deployer端口配置要一致 conf/canal.properties
batchSize: 500
syncBatchSize: 1000
retries: 0
timeout:
accessKey:
secretKey:
canalAdapters:
- instance: rds_test # 这是就是instance Name 服务端conf下的rds_test canal instance Name or mq topic name
groups:
- groupId: g1
outerAdapters:
- name: rdb # 指定为rdb类型同步
key: oracle1 # 指定adapter的唯一key, 与表映射配置中outerAdapterKey对应
properties:
jdbc.driverClassName: oracle.jdbc.OracleDriver # jdbc驱动名,
jdbc.url: jdbc:oracle:thin:@192.168.0.129:1521/orcl # jdbc url
jdbc.username: system # jdbc username
jdbc.password: manager # jdbc password
threads: 5 # 并行执行的线程数, 默认为1
RDB表映射文件 映射表文件再conf/rdb 目录
dataSourceKey: defaultDS destination: rds_test # cannal的instance或者MQ的topic groupId: g1 # 对应MQ模式下的groupId, 只会同步对应groupId的数据 outerAdapterKey: oracle1 # adapter key, 对应上面配置outAdapters中的key concurrent: true # 是否按主键hash并行同步, 并行同步的表必须保证主键不会更改及主键不能为其他同步表的外键!! dbMapping: database: test # 源数据源的数据库名 database/shcema table: mysql_test_1999c # 源数据表名 targetTable: mysql_user # 目标数据源的库名.表名 或者直接表名 targetPk: # 主键映射 id: id # 如果是复合主键可以换行映射多个 mapAll: true # 是否整表映射, 要求源表和目标表字段名一模一样 (如果targetColumns也配置了映射,则以targetColumns配置为准) targetColumns: # 字段映射, 格式: 目标表字段: 源表字段, 如果字段名一样源表字段名可不填 id: iuser:
然后启动../bin/start.sh