使用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-formatROW模式,my.cnf中配置如下

拉取Docker镜像

使用docker启动canal-server
  1. 访问docker hub获取最新的版本 访问:https://hub.docker.com/r/canal/canal-server/tags/
  1. 下载对应的版本

启动(单机模式)

使用canal提供的run.sh脚本:
https://github.com/alibaba/canal/blob/master/docker/run.sh
docker模式下,单docker实例只能运行一个instance,主要为配置问题。

运行效果

notion image
successful代表canal-server启动成功。

启动canal-adapter

配置

canal-adapter下载地址:https://github.com/alibaba/canal/releases
获取对应canal-server(canal.deployer)版本的canal-adapter
notion image
最好使用稳定版本
修改配置文件conf/application.yml为:
  1. 其中 outAdapter 的配置: name统一为rdbkey为对应的数据源的唯一标识需和下面的表映射文件中的outerAdapterKey对应,properties为目标库jdb的相关参数
  1. 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表下面, 并会打出DMLlog

adapter管理REST接口

  • 查询所有订阅同步的canal instanceMQ topic
  • 数据同步开关
针对 sys_info这个canal instance/MQ topic 进行开关操作. off代表关闭,instance/topic下的同步将阻塞或者断开连接不再接收数据, on代表开启
注: 如果在配置文件中配置了 zookeeperHosts项, 则会使用分布式锁来控制HA中的数据同步开关, 如果是单机模式则使用本地锁来控制开关
  • 数据同步开关状态
查看指定 canal instance/MQ topic 的数据同步开关状态

增加Prometheus监控

安装并部署对应平台的prometheus,参见这里
配置prometheus.yml,添加canaljob,示例:
导入模板(Canal_instances_tmpl.json),参考这里
notion image
导入后效果:
notion image
参考地址:
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

© Akapril 2018 - 2024