当前位置:网站首页>canal实现mysql数据同步
canal实现mysql数据同步
2022-07-25 09:24:00 【孰能生巧-LWP】
前言
canal是实现mysql数据备份,异地灾备,异地数据同步等重要的中间件,在实际的业务场景中有着广泛的使用,本文基于小编所在项目中一个异地数据同步的场景为例,通过案例演示下利用canal实现mysql数据同步的过程

同步原理
如上图所示,为canal同步mysql数据的原理的简单示意图,归纳如下:
1.canal 模拟mysql slave 的交互协议,伪装自己为mysql slave,向mysql master 发送dump 协议。
2.mysql master 收到dump请求,开始推送binary log给canal (slave)
3.canal解析binary log对象(原始为byte流)
如果亲手配置过mysql读写分离架构的同学,对canal做数据复制的原理很好理解了,简单来说,就是伪装成master的从节点,监听并解析binlog日志的元数据到目标数据库的数据表
环境准备
一个开启了binlog日志的mysql服务,IP地址为: IP1
另一个安装并启动了mysql服务器的机器,IP地址为 : IP2
canal安装包,包括:canal.adapter-1.1.4.tar.gz , canal.deployer-1.1.4.tar.gz
canal安装包下载地址:https://github.com/alibaba/canal/releases

实现步骤
实现本文需求的话,主要是基于下载的两个安装包的配置,其实对canal有所了解的同学对其实现原理并不陌生,就是两个springboot的服务,对于开发者来说,只需要按照官方wiki提供的同步实现,做各种配置即可
在上一篇springboot整合canal一篇中,我们初步演示了canal的server端配置过程,即 deployer 的配置,本篇,需要对 deployer 和 adapter同时做配置
deployer 配置
1、解压canal.deployer-1.1.4.tar.gz 到指定目录
tar -zxvf canal.deployer-1.1.4.tar.gz -C 目标文件目录
2、进入conf目录,修改canal.properties

如果是msyql同步到mysql,该配置文件无需做修改,保持默认即可,需要注意的地方如下:

3、进入example目录,修改instance.properties

主要需要修改的地方如下:
1.canal.instance.master.address=IP:3306 #mysql源地址

2.mysql源地址授权canal获取数据的账户名和密码
1.canal.instance.dbUsername=root
2.canal.instance.dbPassword=123456
4、启动deployer服务
进入到bin目录,直接使用下面的脚本启动,启动后检查下进程


adapter 配置
1、解压 canal.adapter-1.1.4.tar.gz 到指定目录
1.tar -zxvf canal.adapter-1.1.4.tar.gz 指定目录

2、进入conf 目录,首先修改application.yml 文件
主要需要修改的地方如下,
server:
port: 8081
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
default-property-inclusion: non_nullcanal.conf:
mode: tcp # kafka rocketMQ
canalServerHost: Canal的deployer服务所在IP地址:11111
# zookeeperHosts: slave1:2181
# mqServers: 127.0.0.1:9092 #or rocketmq
# flatMessage: true
batchSize: 500
syncBatchSize: 1000
retries: 0
timeout:
accessKey:
secretKey:
srcDataSources:
defaultDS:
url: jdbc:mysql://mysql源数据库IP:3306/shop001?useUnicode=true
username: root
password: root
canalAdapters:
- instance: example # canal instance Name or mq topic name
groups:
- groupId: g1
outerAdapters:
- name: logger
- name: rdb
key: mysql1
properties:
jdbc.driverClassName: com.mysql.jdbc.Driver
jdbc.url: jdbc:mysql://目标同步IP:3306/shop001?useUnicode=true
jdbc.username: root
jdbc.password: root
3、进入rdb 目录,首先修改mytest_user.yml 文件

下面贴出核心修改的文件内容,需要注意的地方包括:
dataSourceKey: defaultDS
destination: example
groupId: g1
outerAdapterKey: mysql1
concurrent: true
dbMapping:
database: shop001 #mysql源数据库名称
table: user_info #mysql源数据库下的表名称
targetTable: shop001.tar_user #同步到目标数据库-数据表名称
targetPk:
id: id
mapAll: true #如果源表和目标表的字段结构等完全一致,直接开启此配置即可,下面的targetColumns可以注释掉
#targetColumns:
# id:
# name:
# role_id:
# c_time:
# test1:
#etlCondition: "where c_time>={}"
#commitBatch: 3000 # 批量提交的大小
4、启动 adapter 服务
进入bin目录下,使用下面的启动脚本进行启动,然后检查服务进程


在测试之前,我们分别在IP1和IP2上面安装的mysql数据库下创建了 user_info 表和 tar_user表,现在的需求是,数据要从 IP1:user_info => IP2: tar_user 表同步,

当前的状态为,两个库下的两个表均为空,执行下面的数据插入 sql ,给 user_info表插入一条数据
1. INSERT INTO `shop001`.`user_info` (`id`, `name`, `sex`) VALUES ('1', 'xiaoma', 'male');

可以看到,数据几乎是准实时的插入到tar_user表中,当然,当你执行删除、修改等操作时候,同样会同步过去
基于上面的操作,我们完成了一个使用canal实现mysql数据同步的过程,官方提供了诸多的同步方案,比如可以将数据从mysql同步到mysql,es,redis等等,有兴趣的同学可以继续深入研究!
边栏推荐
- 【机器翻译】SCONES——用多标签任务做机器翻译
- vscode插件开发
- Mixed supervision for surface defect detection: from weakly to fully supervised learning
- LoRA转4G及网关中继器工作原理
- Is binary cross entropy really suitable for multi label classification?
- ISP image signal processing
- rospy Odometry天坑小计
- First knowledge of opencv4.x ---- mean filtering
- Connection and data reading of hand-held vibrating wire vh501tc collector sensor
- 用Arduino写个ESP32看门狗
猜你喜欢

无线振弦采集仪参数配置工具的设置

TM1637带秒点四位LED显示器模块ARDUINO驱动程序

Qt 6.2的下载和安装

Evolution based on packnet -- review of depth estimation articles of Toyota Research Institute (TRI) (Part 1)

ARM预备知识

CCF 201503-4 网络延时

CCF 201509-4 Expressway

CCF 201604-2 Tetris

工程仪器振弦传感器无线采集仪的采集数据发送方式及在线监测系统

OC -- Inheritance and polymorphic and pointer
随机推荐
CCF 201503-4 network delay
【Tensorflow2安装】Tensorflow2.3-CPU安装避坑指南!!!
ARMv8通用定时器简介
Store to-do items locally (improve on to-do items)
VS无线振弦采集仪蓝牙功能的使用
深度学习 段错误(Segment Core/ Exit code 139)情况记录
[Android studio] batch data import to Android local database
Coredata storage to do list
App lifecycle and appledelegate, scenedelegate
BSP3 电力监控仪(功率监控仪)端子定义和接线
无线中继采集仪的常见问题
Mlx90640 infrared thermal imager temperature measurement module development notes (I)
Is binary cross entropy really suitable for multi label classification?
入住阿里云MQTT物联网平台
VCS常用命令
FPGA basic advanced
工程监测多通道振弦传感器无线采集仪外接数字传感器过程
dp-851
CCF 201509-2 date calculation
FLASH read / write operation and flash upload file of esp8266