使用canal进行mysql数据实时同步
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
统一为rdb
key
为对应的数据源的唯一标识需和下面的表映射文件中的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
的log
adapter管理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