使用canal进行mysql数据实时同步
AI 摘要
date
Mar 7, 2020
URL
slug
canal-mysql-data-sync
status
Published
tags
mysql
canal
summary
使用canal进行mysql数据实时同步
type
Post
title: 使用canal进行mysql数据实时同步 date: 2020-03-07 14:00:42 tags: [canal,mysql,canal-server,canal-adapter] categories: [学习,data] —
场景
对数据库进行实时增量备份。
安装配置
准备
mysql数据库需要先开启 Binlog写入功能,配置binlog-format 为 ROW模式,my.cnf中配置如下拉取Docker镜像
使用
docker启动canal-server- 访问
docker hub获取最新的版本 访问:https://hub.docker.com/r/canal/canal-server/tags/
- 下载对应的版本
启动(单机模式)
使用
canal提供的run.sh脚本:https://github.com/alibaba/canal/blob/master/docker/run.sh
docker模式下,单docker实例只能运行一个instance,主要为配置问题。运行效果

successful代表
canal-server启动成功。启动canal-adapter
配置
canal-adapter下载地址:https://github.com/alibaba/canal/releases获取对应
canal-server(canal.deployer)版本的canal-adapter
最好使用稳定版本
修改配置文件
conf/application.yml为:- 其中
outAdapter的配置:name统一为rdbkey为对应的数据源的唯一标识需和下面的表映射文件中的outerAdapterKey对应,properties为目标库jdb的相关参数
- adapter将会自动加载
conf/rdb下的所有.yml结尾的表映射配置文件
适配器列表
RDB表映射文件
修改
conf/rdb/mytest_user.yml文件:如果两个库之间表、字段都相同可直接进行镜像备份,
Mysql 库间镜像schema DDL DML同步其中
dbMapping.database的值代表源库和目标库的schema名称,即两库的schema要一模一样启动
将目标库的
jdbc jar包放入lib文件夹 (其他数据库放入对应的驱动)启动
canal-adapter启动器验证 修改
mysql sys_info.user表的数据, 将会自动同步到新mysql数据库的sys_info.user表下面, 并会打出DML的logadapter管理REST接口
- 查询所有订阅同步的
canal instance或MQ topic
- 数据同步开关
针对
sys_info这个canal instance/MQ topic 进行开关操作. off代表关闭,instance/topic下的同步将阻塞或者断开连接不再接收数据, on代表开启注: 如果在配置文件中配置了
zookeeperHosts项, 则会使用分布式锁来控制HA中的数据同步开关, 如果是单机模式则使用本地锁来控制开关- 数据同步开关状态
查看指定 canal instance/MQ topic 的数据同步开关状态
增加Prometheus监控
安装并部署对应平台的
prometheus,参见这里配置
prometheus.yml,添加canal的job,示例:导入模板(Canal_instances_tmpl.json),参考这里

导入后效果:

参考地址:
https://github.com/alibaba/canal/wiki/QuickStart
https://github.com/alibaba/canal/wiki/Docker-QuickStart
https://github.com/alibaba/canal/wiki/ClientAdapter
https://github.com/alibaba/canal/wiki/Sync-RDB
https://github.com/alibaba/canal/wiki/Prometheus-QuickStart