使用canal增量同步mysql数据库信息到ElasticSearch_大老杨的博客-CSDN博客_canal es ts


本站和网页 https://blog.csdn.net/qq_33257527/article/details/93346963 的作者无关,不对其内容负责。快照谨为网络故障时之索引,不代表被搜索网站的即时页面。

使用canal增量同步mysql数据库信息到ElasticSearch_大老杨的博客-CSDN博客_canal es ts
使用canal增量同步mysql数据库信息到ElasticSearch
大老杨
于 2019-06-22 18:12:25 发布
3837
收藏
13
分类专栏:
elasticsearch
mysql
文章标签:
elasticsearch
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_33257527/article/details/93346963
版权
elasticsearch
同时被 2 个专栏收录
3 篇文章
0 订阅
订阅专栏
mysql
4 篇文章
0 订阅
订阅专栏
本文介绍如何使用canal增量同步mysql数据库信息到ElasticSearch。(注意:是增量!!!)
1.简介
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支持。
缺点:
不支持全量更新,只支持增量更新。
完整wiki地址:https://github.com/alibaba/canal/wiki
1.2 运作原理
原理很简单:
Canal模拟MySQL的slave的交互协议,伪装成mysql slave,并将转发协议发送到MySQL Master服务器。MySQL Master接收到转储请求并开始将二进制日志推送到slave(即canal)。Canal将二进制日志对象解析为自己的数据类型(原始字节流)
如图所示:
1.3 同步es
在同步数据到es的时候需要使用适配器:canal adapter。目前最新版本1.1.3,下载地址:https://github.com/alibaba/canal/releases。
目前es貌似支持6.x版本,不支持7.x版本!!!
2.准备工作
2.1 es和jdk
安装es可以参考:https://www.dalaoyang.cn/article/78
安装jdk可以参考:https://www.dalaoyang.cn/article/16
2.2 安装canal server
下载canal.deployer-1.1.3.tar.gz
wget https://github.com/alibaba/canal/releases/download/canal-1.1.3/canal.deployer-1.1.3.tar.gz
解压文件
tar -zxvf canal.deployer-1.1.3.tar.gz
进入解压后的文件夹
cd canal.deployer-1.1.3
修改conf/example/instance.properties文件,主要注意以下几处:
canal.instance.master.address:数据库地址,例如127.0.0.1:3306canal.instance.dbUsername:数据库用户canal.instance.dbPassword:数据库密码
完整内容如下:
#################################################
## mysql serverId , v1.0.26+ will autoGen
# canal.instance.mysql.slaveId=0
# enable gtid use true/false
canal.instance.gtidon=false
# position info
canal.instance.master.address=127.0.0.1:3306
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=
# rds oss binlog
canal.instance.rds.accesskey=
canal.instance.rds.secretkey=
canal.instance.rds.instanceId=
# table meta tsdb info
canal.instance.tsdb.enable=true
#canal.instance.tsdb.url=
#canal.instance.tsdb.dbUsername=
#canal.instance.tsdb.dbPassword=
#canal.instance.standby.address =
#canal.instance.standby.journal.name =
#canal.instance.standby.position =
#canal.instance.standby.timestamp =
#canal.instance.standby.gtid=
# username/password
canal.instance.dbUsername=root
canal.instance.dbPassword=12345678
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
#canal.instance.pwdPublicKey=MFwwDQYJKoZIhvcNAQEBBQADSwAwSAJBALK4BUxdDltRRE5/zXpVEVPUgunvscYFtEip3pmLlhrWpacX7y7GCMo2/JM6LeHmiiNdH1FWgGCpUfircSwlWKUCAwEAAQ==
# table regex
canal.instance.filter.regex=.*\\..*
# table black regex
canal.instance.filter.black.regex=
# mq config
#canal.mq.topic=example
# dynamic topic route by schema or table regex
#canal.mq.dynamicTopic=mytest1.user,mytest2\\..*,.*\\..*
#canal.mq.partition=0
# hash partition config
#canal.mq.partitionsNum=3
#canal.mq.partitionHash=test.table:id^name,.*\\..*
#################################################
回到canal.deployer-1.1.3目录下,启动canal:
sh bin/startup.sh
查看日志:
vi logs/canal/canal.log
查看具体instance日志:
vi logs/example/example.log
关闭命令
sh bin/stop.sh
2.3 安装canal-adapter
下载canal.adapter-1.1.3.tar.gz
wget https://github.com/alibaba/canal/releases/download/canal-1.1.3/canal.adapter-1.1.3.tar.gz
解压
tar -zxvf canal.adapter-1.1.3.tar.gz
进入解压后的文件夹
cd canal.adapter-1.1.3
修改conf/application.yml文件,主要注意如下内容,由于是yml文件,注意我这里说明的属性名称:
server.port:canal-adapter端口号canal.conf.canalServerHost:canal-server地址和ipcanal.conf.srcDataSources.defaultDS.url:数据库地址canal.conf.srcDataSources.defaultDS.username:数据库用户名canal.conf.srcDataSources.defaultDS.password:数据库密码canal.conf.canalAdapters.groups.outerAdapters.hosts:es主机地址,tcp端口
完整内容如下:
server:
port: 8081
spring:
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
default-property-inclusion: non_null
canal.conf:
mode: tcp
canalServerHost: 127.0.0.1:11111
batchSize: 500
syncBatchSize: 1000
retries: 0
timeout:
accessKey:
secretKey:
srcDataSources:
defaultDS:
url: jdbc:mysql://127.0.0.1:3306/test?useUnicode=true
username: root
password: 12345678
canalAdapters:
- instance: example
groups:
- groupId: g1
outerAdapters:
- name: es
hosts: 127.0.0.1:9300
properties:
cluster.name: elasticsearch
另外需要配置conf/es/*.yml文件,adapter将会自动加载conf / es下的所有.yml结尾的配置文件。在介绍配置前,需要先介绍一下本案例使用的表结构,如下:
CREATE TABLE `test` (
`id` int(11) NOT NULL,
`name` varchar(200) NOT NULL,
`address` varchar(1000) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
需要手动去es中创建索引,比如这里使用es-head创建,如下图:
test索引结构如下:
"mappings":{
"_doc":{
"properties":{
"name":{
"type":"text"
},
"address":{
"type":"text"
接下来创建test.yml(文件名随意),内容很好理解_index为索引名称,sql为对应语句,内容如下:
dataSourceKey: defaultDS
destination: example
groupId:
esMapping:
_index: test
_type: _doc
_id: _id
upsert: true
sql: "select a.id as _id,a.name,a.address from test a"
commitBatch: 3000
配置完成后,回到canal-adapter根目录,执行命令启动
bin/startup.sh
查看日志
vi logs/adapter/adapter.log
关闭canal-adapter命令
bin/stop.sh
3.测试
都启动成功后,先查看一下es-head,如图,现在是没有任何数据的。
接下来,我们在数据库中插入一条数据进行测试,语句如下:
INSERT INTO `test`.`test`(`id`, `name`, `address`) VALUES (7, '北京', '北京市朝阳区');
然后在看一下es-head,如下
接下来看一下日志,如下:
2019-06-22 17:54:15.385 [pool-2-thread-1] DEBUG c.a.otter.canal.client.adapter.es.service.ESSyncService - DML: {"data":[{"id":7,"name":"北京","address":"北京市朝阳区"}],"database":"test","destination":"example","es":1561197255000,"groupId":null,"isDdl":false,"old":null,"pkNames":["id"],"sql":"","table":"test","ts":1561197255384,"type":"INSERT"}
Affected indexes: test
小知识点:上面介绍的查看日志的方法可能不是很好用,推荐使用如下语法,比如查看日志最后200行:
tail -200f logs/adapter/adapter.log
4.总结
1.全量更新不能实现,但是增删改都是可以的。 2.一定要提前创建好索引。 3.es配置的是tcp端口,比如默认的9300
大老杨
关注
关注
11
点赞
13
收藏
打赏
评论
使用canal增量同步mysql数据库信息到ElasticSearch
本文介绍如何使用canal增量同步mysql数据库信息到ElasticSearch。(注意:是增量!!!)1.简介1.1 canal介绍Canal是一个基于MySQL二进制日志的高性能数据同步系统。Canal广泛用于阿里巴巴集团(包括https://www.taobao.com),以提供可靠的低延迟增量数据管道,github地址:https://github.com/alibaba/ca...
复制链接
扫一扫
专栏目录
实战 | canal 实现Mysql到Elasticsearch实时增量同步
铭毅天下Elasticsearch
03-16
3万+
题记
关系型数据库Mysql/Oracle增量同步Elasticsearch是持续关注的问题,也是社区、QQ群等讨论最多的问题之一。
问题包含但不限于:
1、Mysql如何同步到Elasticsearch?
2、Logstash、kafka_connector、canal选型有什么不同,如何取舍?
3、能实现同步增删改查吗? …
本文给出答案。
1、Canal同步
1.1 canal官方已支持...
Mysql+Canal+ElasticSearch实现数据同步
H_porridge的博客
04-06
2472
1.canal简介
canal主要用于对mysql的增量日志进行解析(请注意,只支持增量解析,不支持全量解析),提供增量数据的订阅和消费,对mysql增量数据进行实时同步,支持同步到mysql、elasticsearch、hbase等数据源
1.1 canal常用组件
canal-deployer(canal-server):
监听mysql的binlog,把自己伪装成mysql slave,只负责接收数据,不做数据处理
canal-adapter:
canal客户端,从canal-server中获取数据
评论 3
您还未登录,请先
登录
后发表或查看评论
TS流中PES/ES抽取
10-02
TS流中PES ES抽取,其他抽取I帧需自己完善;童叟无欺 很值得研究。
研究TS中PES ES提取的做参考
Canal实现Mysql和ES数据同步
最新发布
Blue92120的博客
11-10
1345
当然, 市面上有很多Canal客户端, 我们以GitHub上的第三方开源的canal-starter客户端, 并且结合SpringBoot为例, 进行演示。而ES所实现的搜索, 需要把数据放入ES中, 才能实现, 所以, 就需要我们把mysql中的数据, 同步到ES中才可以。在实际开发中,为了保证数据的安全性和持久性, 所以,我们一般会把数据存储的数据库中, 比如mysql数据库。Canal提供了各种语言的客户端,当Canal监听到binlog变化时,会通知Canal的客户端。
canal采集mysql binlog的json各个字段的含义说明
zuoliansheng的博客
06-09
431
canal采集mysql binlog的json各个字段的含义说明
canal adapter没有同步成功无异常
进击的小白
01-26
2877
现象
adapter日志中显示出了同步的数据,但是没有同步到备份数据库中
INFO c.a.o.canal.client.adapter.logger.LoggerAdapterExample - DML: {"data":[{........,"updatedAt":"2020-12-24 11:23:53"}],"pkNames":["id"],"sql":"","table":"test_user","ts":1611647428329,"type":"UPDATE"}
原因与方案
显示
canal adapter同步异常:field name is null or empty
进击的小白
01-26
1752
现象
在使用批量同步数据时出现错误:
curl http://127.0.0.1:8081/etl/es7/test-user/test_user.yml -X POST
{"succeeded":false,"resultMessage":"导入ES 数据:666 条","errorMessage":"test_user etl failed! ==>field name is null or empty\ntest_user etl failed! ==>field name is
canal实现mysql数据同步
a1091758887的博客
07-28
565
canal.adapter配置文件application.yml中es的访问地址填,要加上http://,否则会连接不上。有些版本不要加,如果出现连接报错,可以参考一下这个解决方案。es7下同步数据的配置文件xxx.yml,在确认配置没有问题的情况下启动adapter查看日志报错的情况,建议删除掉这个配置文件,重新建一个新的配置文件,再进行配置。另外配置文件要有被访问的权限。.........
坑一:canal 的一处TODO 引发的一地华子
fifthangel8080的博客
09-18
379
来个定场
点扛start一时爽,日志报错眼环铃,搞不清楚东,猜不明白西,全无头绪急急急,哎呀~嗒~我去~
提要:
业务场景:纸质票据的打印记录(order_print_record)与OCR技术识别纸质票据的采集记录(order_collection_record_0)做left join关联查询;
因系统是分库分表,2个db实例 15个库(其它不此处展开),需要做数据归并后高级查询,引入了es做高级搜索、cana做lmysql binlog异步...
es sync之 canal / adapter 部署
刘军的博客
09-06
3891
项目案例:https://github.com/liujun19921020/SpringCloudDemo/tree/master/alibaba/canal
MySQL
MySQL 需开启 binlog 写入功能,并配置 binlog-format 为 ROW 模式
[mysqld]
log-bin=mysql-bin # 开启 binlog
binlog-format=ROW ...
mysql同步至es,canal源码调试【临时笔记】
JustPlay1994的专栏
07-13
1708
启动工程
拉取源码
配置并启动服务端
配置depolyer模块下example.instance.properties中的数据库,然后启动CanalLauncher,服务端启动完成,并监听了刚配置的数据库的binlog。
配置客户端
创建简单表
CREATE TABLE `dailylog` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`content`...
Canal同步数据库实现
hequnwang10的博客
07-21
833
尝试使用canal来实现将数据库同步到本地。canal是阿里巴巴旗下的一款开源项目,纯Java开发。基于数据库增量日志解析,提供增量数据订阅&消费,目前主要支持了MySQL。
接下来就实现如何使用canal实现数据库同步到本地。服务器可以自己使用不用的电脑安装ubuntu系统或者买阿里云服务器。
一、安装mysql
这里使用docker安装mysql。这里如何在Linux服务器中使用docker安装mysql,可以参考我之前的文章-《docker安装mysql5.7》。并且开启binlog-《doc
Canal部署过程中的错误
weixin_43286124的博客
07-09
3874
文章目录错误一:NullPointerException错误二:MySQLNonTransientConnectionException错误三:ESConnection错误四:UnknownHostException错误五:CommunicationsException错误六:CanalClientException错误七:ClassCastException错误八:IllegalStateException错误九:65536canal程序包API
错误一:NullPointerException
日志:
canal es适配器
weixin_43931625的博客
07-07
704
canal es适配器
Canal adapter1.1.5安装部署配置(3)
进击的小白
01-15
4882
使用前必须先安装Canal server,Canal最新1.1.4版安装部署(1)
安装
版本根据情况自行调整,最新版本参考:https://github.com/alibaba/canal/releases
#进入安装包
cd /opt
#下载安装包
wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.adapter-1.1.4.tar.gz
#创建安装目录
mkdir canal-adapter
MySQL+Canal+Elasticsearch实现数据同步
云丶言的博客
08-08
924
说在前头: 本人为大二在读学生,书写文章的目的是为了对自己掌握的知识和技术进行一定的记录,同时乐于与大家一起分享,因本人资历尚浅,发布的文章难免存在一些错漏之处,还请阅读此文章的大牛们见谅与斧正。若在阅读时有任何的问题,也可通过评论提出,本人将根据自身能力对问题进行一定的解答。
版本说明
软件
版本
Elasticsearch
7.7.0
MySQL
5.7.16
canal.adapter
1.1.5
canal.deployer
1.1.5
原理简述
在前面的文章中.
基于canal实现mysql和es增量数据同步
u012736435的博客
09-10
519
canal主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。
Canal增量同步Mysql数据到ES
十四 丶
02-11
1309
对应版本: Mysql 5.7 Es 7.4 Canal 1.1.5
常见报错原因
https://blog.csdn.net/qq_24950043/article/details/122463372
下载如下:https://github.com/alibaba/canal/releases
修改deployer配置文件
上面配置过不需要配置
修改adapter配置文件
修改/conf/application.yml
server:
port: 8081 #adapte
Mysql+Canal1.1.5+Es实现数据同步
trustProcess的博客
08-11
592
Mysql+Canal1.1.5+Es实现数据同步
elasticsearch 搭配 canal 构建主从复制架构整合canal实战(三)
m0_37723564的博客
01-26
4151
前言
canal 同步mysql数据到elasticsearch
“相关推荐”对你有帮助么?
非常没帮助
没帮助
一般
有帮助
非常有帮助
提交
©️2022 CSDN
皮肤主题:Age of Ai
设计师:meimeiellie
返回首页
大老杨
CSDN认证博客专家
CSDN认证企业博客
码龄7年
企业员工
114
原创
2万+
周排名
196万+
总排名
85万+
访问
等级
6333
积分
584
粉丝
563
获赞
148
评论
1128
收藏
私信
关注
热门文章
SpringBoot使用Nacos配置中心
133676
使用IntelliJ Idea新建SpringBoot项目
66279
解决Intellij IDEA部署JavaWeb项目 404问题
61007
linux安装redis
47689
docker部署springboot项目
37434
分类专栏
springboot系列
2篇
SpringBoot学习历程
40篇
SpringBoot
58篇
maven
SpringCloud
15篇
java
2篇
Intellij IDEA
3篇
nginx
5篇
Linux
17篇
docker
Vue
1篇
ELK
1篇
Jenkins
2篇
RocketMQ
1篇
Kafka
1篇
mysql
4篇
elasticsearch
3篇
Sharding-JDBC
1篇
dubbo
1篇
最新评论
SpringBoot使用Neo4j
MaggieCN0622:
只有用你的代码成功了,谢谢
SpringBoot使用Nacos配置中心
ezreal_tao:
${nacos.test.propertie:123}应该是
${nacos.test.properties:123}
少了s
SpringBoot使用Neo4j
weixin_38848650:
@NodeEntity:标明是一个节点实体
@RelationshipEntity:标明是一个关系实体
@Id:实体主键
@Property:实体属性
@GeneratedValue:实体属性值自增
@StartNode:开始节点(可以理解为父节点)
@EndNode:结束节点(可以理解为子节点)
这些注解作废了吗?我用的spring2.7的就有@node和@relationshipproperty了,springdata neo4j关系保存不了,要疯了
使用Nginx部署静态网站
SeiyaTaw:
大佬,我也是用的阿里云服务器,一步一步照着你这个做的,vim文件也配置了,可就是浏览器进不去页面。
我的新书《SpringBoot 2 实战之旅》
漠北_牧马人:
一个springboot 写那么厚?
您愿意向朋友推荐“博客详情页”吗?
强烈不推荐
不推荐
一般般
推荐
强烈推荐
提交
最新文章
SpringBoot使用Neo4j
Elasticsearch学习-父子文档
Elasticsearch学习-嵌套文档
2020年4篇
2019年24篇
2018年86篇
目录
目录
分类专栏
springboot系列
2篇
SpringBoot学习历程
40篇
SpringBoot
58篇
maven
SpringCloud
15篇
java
2篇
Intellij IDEA
3篇
nginx
5篇
Linux
17篇
docker
Vue
1篇
ELK
1篇
Jenkins
2篇
RocketMQ
1篇
Kafka
1篇
mysql
4篇
elasticsearch
3篇
Sharding-JDBC
1篇
dubbo
1篇
目录
评论 3
被折叠的 条评论
为什么被折叠?
到【灌水乐园】发言
查看更多评论
打赏作者
大老杨
你的鼓励将是我创作的最大动力
¥2
¥4
¥6
¥10
¥20
输入1-500的整数
余额支付
(余额:-- )
扫码支付
扫码支付:¥2
获取中
扫码支付
您的余额不足,请更换扫码支付或充值
打赏作者
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额
抵扣说明:
1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。 2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。
余额充值