mysql主从canal_canal实现同步MySQL的数据到从库1.技术⽅案概览
开启MySQL的binlog⽇志记录
修改MySQL的binlog模式为ROW
canal-server充当MySQL集的⼀个slave,获取master的binlog信息
canal-server将拿到的binlog信息推送给canal-adapter
canal-adapter将数据同步到MySQL从库
2.设置MySQL
⾸先我们要开启MySQL的binlog记录功能,选择模式为ROW
修改myf:vi /etc/myf
添加以下三⾏内容,如果原来存在,则不需要添加,只需对当前配置项进⾏修改即可
log-bin=mysql-bin #添加这⼀⾏就ok
binlog-format=ROW #选择row模式
server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复
配置⽂件修改成功后重启MySQL
3.配置canal⽤户
canal的原理是模拟⾃⼰为mysql slave,所以这⾥⼀定需要做为mysql slave的相关权限.
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
FLUSH PRIVILEGES;
4.启动canal-service
下载canal-server,我这边下载的版本是canal.deployer-1.1.
canal-server充当MySQL集的⼀个slave,获取master的binlog信息
修改canal配置⽂件instance.properties
idon=false
# position info 修改主库地址
canal.instance.master.address=192.168.1.152:3306
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.id=
# rds oss binlog
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=mysql下载之后是个文件夹
canal.instance.rds.instanceId=
# table meta tsdb info
canal.able=true
# username/password 修改账号密码 数据库
canal.instance.dbUsername=canal
canal.instance.dbPassword=canal
tionCharset = UTF-8
canal.instance.defaultDatabaseName =infosys_test
# enable druid Decrypt database password
ableDruid=false
修改canal.properties
canal.id = 10000
canal.ip =
canal.port = 11111
# 配置zk服务
canal.zkServers = 192.168.1.200:2181
# flush data to zk
canal.withoutNetty = false
修改完成之后启动canal 服务
5.启动adaper
下载canal-server,我这边下载的版本是canal.adapter-1.1. 修改l
server:
port: 8081
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
default-property-inclusion: non_null
mode: tcp # kafka rocketMQ
zookeeperHosts: 192.168.1.200:2181
batchSize: 500
syncBatchSize: 1000
retries: 0
timeout:
accessKey:
secretKey:
srcDataSources:
defaultDS:
# 配置 主库地址
url: jdbc:mysql://192.168.1.152:3306/infosys_test?useUnicode=true username: canal
password: canal
canalAdapters:
- instance: example # canal instance Name or mq topic name
groups:
- groupId: g1
outerAdapters:
- name: logger
- name: rdb
key: mysql1
properties:
jdbc.driverClassName: sql.jdbc.Driver
# 配置从库地址
jdbc.url: jdbc:mysql://192.168.1.200:3306/infosys_test?useUnicode=true jdbc.username: root
jdbc.password: root
注意:这边从库⼀定要记得给授权,否则连不上,就不能将数据写⼊了
修改rdb/l
dataSourceKey: defaultDS
destination: example
groupId: g1
outerAdapterKey: mysql1
dbMapping:
#配置数据库
database: infosys_test
#配置表
table: admin_user
targetTable: infosys_test.admin_user
targetPk:
id: id
mapAll: true
进⼊bin⽬录启动服务即可;
6.测试
在152数据库中插⼊⼀条数据库,检查是否在200中同步,同步成功即配置成功;
7.关于批量同步
⽬前来说是不⽀持批量同步的,要实现批量同步的话需要l配置多个name: rdb;
rdb⽂件夹下要为每个表配置dataSourceKey、destination、outerAdapterKey、dbMapping等对应参数,这样就可以实现批量同步了;
但是个⼈感觉这个⽅案更适⽤于单个表更新之后同步缓存或索引,例如⽤户信息更新之后,更新Redis缓存

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。