canal mysql从库_Canal 实现 Mysql数据库实时数据同步

news/2024/7/4 8:14:41

简介

1.1 canal介绍

​ Canal是一个基于MySQL二进制日志的高性能数据同步系统。Canal广泛用于阿里巴巴集团(包括https://www.taobao.com),以提供可靠的低延迟增量数据管道,github地址:https://github.com/alibaba/canal

Canal Server能够解析MySQL binlog并订阅数据更改,而Canal Client可以实现将更改广播到任何地方,例如数据库和Apache Kafka。

它具有以下功能:支持所有平台。

支持由Prometheus提供支持的细粒度系统监控。

支持通过不同方式解析和订阅MySQL binlog,例如通过GTID。

支持高性能,实时数据同步。(详见Performance)

Canal Server和Canal Client都支持HA / Scalability,由Apache ZooKeeper提供支持

Docker支持。

缺点:

不支持全量更新,只支持增量更新。

1.2 运作原理

原理很简单:Canal模拟MySQL的slave的交互协议,伪装成mysql slave,并将转发协议发送到MySQL Master服务器。

MySQL Master接收到转储请求并开始将二进制日志推送到slave(即canal)。

Canal将二进制日志对象解析为自己的数据类型(原始字节流)

如图所示:

准备工作

2.1 下载解压canal-server

​ 通过 github 下载 canal-server release 版本(本次安装文档使用v1.1.4)

root@locahost:/# wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz

​ 解压

tar -zxvf canal.deployer-1.1.4.tar.gz

2.2 下载解压 canal-adapter

​ 通过 github 下载 canal-adapter release 版本(本次安装文档使用v1.1.4)

root@locahost:/# wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.adapter-1.1.4.tar.gz

​ 解压

tar -zxvf canal.adapter-1.1.4.tar.gz

配置 canal-server

3.1 canal-server 配置

​ 解压之后进入 conf文件夹中,修改 canal.properties 根据实际需要来修改(如果不使用kafka或MQ 默认tcp即可)

canal.destinations = prod # 指定instance的名字多个使用逗号分隔

​ 保存之后在conf目录创建 prod 文件夹并将 example文件夹中的 nstance.properties copy 到and_prod中

mkdir ant_prod #创建文件夹

cp example/nstance.properties prod/ # copy 文件

​ 修改 nstance.properties 配置如下:

canal.instance.master.address=127.0.0.1:3306 # 源Mysql地址

canal.instance.dbUsername=canal # 源Mysql账号

canal.instance.dbPassword=canal # 源Mysql密码

canal.instance.connectionCharset=UTF-8 # 与源数据库编码格式一致

canal.instance.defaultDatabaseName=test_database # 默认监听源数据库

3.2 canal-server 启动

​ 进入 canal-server bin 目录 启动

cd canal-server/bin # 进入目录

./startup.sh & # 后台启动

​ 查看日志,是否启动成功

cd canal-server/logs/ant_prod #进入日志目录

​ 启动成功:

2020-06-09 17:13:04.956 [main] WARN o.s.beans.GenericTypeAwarePropertyDescriptor - Invalid JavaBean property 'connectionCharset' being accessed! Ambiguous write methods found next to actually used [public void com.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.setConnectionCharset(java.nio.charset.Charset)]: [public void com.alibaba.otter.canal.parse.inbound.mysql.AbstractMysqlEventParser.setConnectionCharset(java.lang.String)]

2020-06-09 17:13:04.990 [main] INFO c.a.o.c.i.spring.support.PropertyPlaceholderConfigurer - Loading properties file from class path resource [canal.properties]

2020-06-09 17:13:04.990 [main] INFO c.a.o.c.i.spring.support.PropertyPlaceholderConfigurer - Loading properties file from class path resource [ant_prod/instance.properties]

2020-06-09 17:13:05.305 [main] INFO c.a.otter.canal.instance.spring.CanalInstanceWithSpring - start CannalInstance for 1-ant_prod

2020-06-09 17:13:05.311 [main] WARN c.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert - --> init table filter : ^.*\..*$

2020-06-09 17:13:05.311 [main] WARN c.a.o.canal.parse.inbound.mysql.dbsync.LogEventConvert - --> init table black filter :

2020-06-09 17:13:05.315 [main] INFO c.a.otter.canal.instance.core.AbstractCanalInstance - start successful....

2020-06-09 17:13:05.422 [destination = ant_prod , address = rm-wz99s5v03gso12521.mysql.rds.aliyuncs.com/192.xxxxxx:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> begin to find start position, it will be long time for reset or first position

2020-06-09 17:13:05.423 [destination = ant_prod , address = rm-wz99s5v03gso12521.mysql.rds.aliyuncs.com/192.xxxxxx:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - prepare to find start position just show master status

2020-06-09 17:13:06.483 [destination = ant_prod , address = rm-wz99s5v03gso12521.mysql.rds.aliyuncs.com/192.xxxxxx:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> find start position successfully, EntryPosition[included=false,journalName=mysql-bin.000234,position=6676924,serverId=184376678,gtid=,timestamp=1591693973000] cost : 1051ms , the next step is binlog dump

配置 canal-adapter

4.1 canal-adapter 配置

​ 由于Mysql 是8.0 这里需要下载 mysql-connector-java-8.0.20.jar,并将其放入lib中

cp mysql-connector-java-8.0.20.jar /canal-adapter/lib/

​ 解压之后进入 conf文件夹中,修改 application.yml

server:

port: 8089

spring:

jackson:

date-format: yyyy-MM-dd HH:mm:ss

time-zone: GMT+8

default-property-inclusion: non_null

canal.conf:

mode: tcp # kafka rocketMQ

canalServerHost: 127.0.0.1:11111

batchSize: 500

syncBatchSize: 1000

retries: 0

timeout:

accessKey:

secretKey:

# 源Mysql 地址账号密码等

srcDataSources:

defaultDS:

url: jdbc:mysql://localhost:3306/test_database?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai

username: canal

password: canal

# 需要实时同步数据库,如果多个实例进行区分即可

canalAdapters:

- instance: prod # canal instance,在canal-server中指定instance的名称

groups:

- groupId: g1

outerAdapters:

- name: rdb

key: mysql1 # 唯一标示

properties:

jdbc.driverClassName: com.mysql.jdbc.Driver

jdbc.url: jdbc:mysql://localhost:3306/test_database_01?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai

jdbc.username: canal

jdbc.password: canal

​ 编辑rdb目录下面表的映射文件,数据库/表 (多个表创建多个映射文件,文件名对应表名)以此类推

dataSourceKey: defaultDS

destination: prod

outerAdapterKey: mysql1

concurrent: true

dbMapping:

database: test_database_01

table: test

targetTable: test_database_01.test

targetPk:

id: id

mapAll: true

4.1 canal-adapter 启动

​ 进入 canal-adapter/bin 目录 启动

cd canal-adapter/bin # 进入目录

./startup.sh & # 后台启动

​ 查看日志,是否启动成功

cd canal-adapter/adapter/logs/ #进入日志目录

tail -f adapter.log # 查看日志是否启动成功

测试数据库同步

更新/删除/批量插入/批量更新/批量删除


http://www.niftyadmin.cn/n/1895017.html

相关文章

模型剪枝和量化_人脸识别系统之模型压缩裁剪量化

本文用途仅仅是在前人经验下,自我总结,以供以后学习使用,若有错误,敬请您批评指正。应用背景:深度学习的应用加速了计算机视觉领域的发展,但是随着模型深度的加深,也带来了高额的存储空间、计算…

代码生成器开发笔记(2)-数据库架构

代码生成器开发笔记(2)-数据库架构 程序 2009-06-13 01:30:01 阅读55 评论0 字号:大中小 订阅 要完成代码生成器,第一个要解决的是完全解析数据库架构。 对SQL Server当然没什么问题,早在ADO时代就可以通过查询sy…

mysql on linux 安装_MySQL on Linux手动安装方法

MySQL on Linux手动安装方法发布时间:2007-06-05 11:44:45来源:红联作者:TecCTO1. 下载"mysql-standard-5.0.27-Linux-i686-icc-glibc23.tar.gz",推荐ICC版本,据称比GCC性能提高10-20%2. 复制到/usr/local/,解压:tar zx…

MongoDB最新最佳连接工具:Robo 3T

MongoDB连接工具 像使用Mysql,喜欢用Navicat连接工具一样。 在使用MongoDB数据库的时候,同样可以使用Robo 3T图形化工具。 一、下载Robo 3T Robo 3T官网 Studio 3T:专业人士使用的,需要付费。 Robo 3T:虽然免费&…

mysql audit_mysql5.7添加日志审计插件audit-plugin

来自McAfee的MySQL插件,为MySQL提供审计功能,重点是安全性和审计要求。该插件可以用作独立的审核解决方案,也可以配置为将数据提供给外部监视工具。插件下载地址:首先查看mysql的插件保存目录:mysql> show global v…

代码生成器开发笔记(3)-界面设计

代码生成器开发笔记(3)-界面设计 程序 2009-06-13 13:48:34 阅读73 评论0 字号:大中小 订阅 解决了数据架构问题,开始正式动手写代码。 第一个问题当然是界面设计了。准备做成VS2005风格,也就是多文档、支持窗体停靠&#xf…

拓扑排序c语言代码_折半插入排序算法(C语言代码实现)

上一节介绍了直接插入排序算法的理论实现和具体的代码实现,如果你善于思考就会发现该算法在查找插入位置时,采用的是顺序查找的方式,而在查找表中数据本身有序的前提下,可以使用折半查找来代替顺序查找,这种排序的算法…

分布式数据库操作笔记

/*映射和删除远程服务器连接 */exec sp_addlinkedserver serverdemo, srvproduct,datasrc192.168.2.93,providerSQLOLEDB /* 不能再事务中执行存储过程*/ exec sp_dropserver demo select * from sys.servers /*查询此服务器中所有服务器映射记录 */ /*映射和删除远程服务器…