背景:

A部门想将mysql中多张表join成一个sql查询语句,然后将结果同步到es中供搜索使用

环境信息:

源端mysql在阿里云上,有公网ip

目标端es在华为云上,三节点

操作步骤与目的:

配置MySQL供canal访问

1.由于阿里云的rds一般都配置了白名单,因此需要将后续canal所在的ecs的公网ip填入rds的白名单之中

注意外网对应阿里云的经典网络.在专有网络中设置并没有效果

2.确认已开启binlog并是row格式,一般不需要再做修改

安装canal-server端,用于获取mysql的binlog日志

1.在华为云上开通一台ecs,注意要与阿里云的公网ip相通,且与华为云es相通

2.ecs开启后,进行canal-server的安装.其原理是模拟成为mysql的slave备机,从而拿到binlog日志,可供后续使用

2.1.先安装java环境

yum install java-1.8.0-openjdk

2.2.安装canal-server,建议使用官方镜像,这里使用的是1,1.5版本,注意并不是最新版本

docker pull canal/canal-server:v1.1.5
docker run --name canal115 -p 11111:11111 --link mysql5736:mysql5736 -id canal/canal-server:v1.1.5

如果docker服务异常,则建议初始化docker服务

/bin/systemctl start docker.service
systemctl status docker.service
cp /lib/systemd/system/docker.service /etc/systemd/system/docker.service
systemctl daemon-reload
systemctl start docker

如果docker拉取速度感人,可以修改其配置源

1 mkdir -p /etc/docker
2 vi /etc/docker/daemon.json
3 {
4 "registry-mirrors": ["https://yxzrazem.mirror.aliyuncs.com"]
5 }
6 sudo systemctl daemon-reload
7 sudo systemctl restart docker

2.3.进入docker并配置canal-server

 1 docker exec -it canal115 /bin/bash
2 cd canal-server/conf/example/
3 vi instance.properties // 修改涉及到的配置 xx调整为对应数据
4
5 # 修改成mysql对应的账号密码,需要保证网络连通,账号密码正确
6 canal.instance.master.address=10.208.xx.xx:3306
7 canal.instance.dbUsername=xx
8 canal.instance.dbPassword=xx
9 # 需要同步的表名称,一般是schema名.*
10 canal.instance.filter.regex=xx.*
11 # 不需要同步的表名称,不需改动
12 canal.instance.filter.black.regex=mysql\\.slave_.*

2.4 开启canal-server服务

1 docker restart  canal115
2
3 docker exec -it canal115 /bin/bash
4 tail -100f /home/admin/canal-server/logs/example/example.log // 查看日志

出现the next step is binlog dump说明配置正常.

安装canal-adapter,用于数据同步到es

1.下载canal-adapter

wget https://github.com/alibaba/canal/releases/download/canal-1.1.5/canal.adapter-1.1.5.tar.gz

2.解压安装

mkdir adapter-1.1.5
mv canal.adapter-1.1.5.tar.gz adapter-1.1.5
cd adapter-1.1.5
tar zxvf canal.adapter-1.1.5.tar.gz

3.配置application.yml 用于保存源端与目标端基本信息

adapter-1.1.5/conf/application.yml  // 修改涉及到的配置 xx调整为对应数据

    # canal tcp consumer 这里配置canal-server所在的docker的ip
canal.tcp.server.host: 172.30.x.x:11111 #配置源端信息
srcDataSources:
defaultDS:
url: jdbc:mysql://10.208.xx.xx:3306/xx?useUnicode=true
username: xx
password: xx #配置目标端信息
canalAdapters:
- instance: example #无需改动
groups:
- groupId: g1 #无需改动
outerAdapters:
- name: logger
- name: es7 #按目标端es版本设置,有es6和es7
hosts: http://10.208.128.3:9200 #源端的内网访问地址,任一即可
properties:
mode: rest #无需改动
cluster.name: xx #集群名称
security.auth: xx:xx #集群用户名密码

4.设置yml文件,用于保存需要同步的sql语句,注意sql语句有限制

详见:https://github.com/alibaba/canal/wiki/Sync-ES

觉得太长的话,概括如下:

1.只能用左连接left join

2.总表数不能超过3个,也就是可以left join 2张表

3.on条件的字段,必须至少有一个出现在select语句中

如果是全量.则可以在源端生成视图进行同步

但是增量不支持视图,因为关联不上.只能用left join语句

vi /soft/adapter-1.1.5/conf/es7/xx.yml 
dataSourceKey: defaultDS
destination: example
groupId: g1
esMapping:
_index: index_xx #对应es的索引名称
_id: _id
sql: "select _id,col2,col3 from xx" #sql语句
commitBatch: 3000

5.在es生成好索引

#删除索引
delete /index_xx
#建索引语句,对col3进行分词处理
PUT /index_xx
{
"settings": {
"analysis": {
"filter": {
"my_synonym": {
"type": "dynamic_synonym"
}
},
"analyzer": {
"ik_synonym": {
"filter": [
"my_synonym"
],
"type": "custom",
"tokenizer": "ik_smart"
}
}
}
},
"mappings" : {
"properties" : {
"col2" : {
"type" : "text"
},
"col3" : {
"type": "text",
"analyzer": "ik_smart",
"search_analyzer": "ik_synonym"
}
}
}
}
}

6.启动服务开始同步

启动adapter
/soft/adapter-1.1.5/bin/startup.sh
查看日志
tail -100f /soft/adapter-1.1.5/logs/adapter/adapter.log
停止进程
/soft/adapter-1.1.5/bin/stop.sh
查看adapter配置情况
more /soft/adapter-1.1.5/conf/application.yml
查看同步表(视图)配置情况
more /soft/adapter-1.1.5/conf/es7/xx.yml
全量同步
curl http://10.208.128.229:8081/etl/es7/xx.yml -X POST

会遇到的一些报错

1.日志提示

java.lang.ClassCastException: com.alibaba.druid.pool.DruidDataSource cannot be cast to com.alibaba.druid.pool.DruidDataSource

替换jar包

下载v1.1.5-alpha-2 版本下的client-adapter.es7x-1.1.5-SNAPSHOT-jar-with-dependencies.jar 替换原client-adapter.es7x-1.1.5-jar-with-dependencies.jar

通过Canal将云上MySQL数据同步到华为云ES(CSS)中的更多相关文章

  1. canal整合springboot实现mysql数据实时同步到redis

    业务场景: 项目里需要频繁的查询mysql导致mysql的压力太大,此时考虑从内存型数据库redis里查询,但是管理平台里会较为频繁的修改增加mysql里的数据 问题来了: 如何才能保证mysql的数 ...

  2. 几篇关于MySQL数据同步到Elasticsearch的文章---第一篇:Debezium实现Mysql到Elasticsearch高效实时同步

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484358&idx=1&sn=3a78347 ...

  3. 几篇关于MySQL数据同步到Elasticsearch的文章---第四篇:使用go-mysql-elasticsearch同步mysql数据库信息到ElasticSearch

    文章转载自: https://www.cnblogs.com/dalaoyang/p/11018541.html 1.go-mysql-elasticsearch简介 go-mysql-elastic ...

  4. AppleWatch___学习笔记(三)iPhone和Apple Watch上的数据同步

    WatchKit App类似于之前iOS 8上新推出的App Extension(应用扩展),比如Today Extension(今天扩展)和Share Extension(分享扩展).只要你对iOS ...

  5. Mysql数据同步Elasticsearch方案总结

    Mysql数据同步Elasticsearch方案总结 https://my.oschina.net/u/4000872/blog/2252620

  6. 性能达到原生 MySQL 七倍,华为云 Taurus 技术解读【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  7. 硬核评测:企业上云的极速存储挑战,华为云全新极速IO云硬盘性能评测

    来源:至顶网 作者:董培欣 借助华为云全新一代极速IO云硬盘开启邀测的时机,至顶网评测实验室展开了一次华为云极速IO云硬盘与超高IO云硬盘的性能对比测试活动,并且尝试通过相关测试成绩,对云硬盘的应用能 ...

  8. github下载速度慢甚至多次失败,通过码云的导入功能导入github项目到码云上,然后再从码云下载

    github下载速度慢甚至多次失败,通过码云的导入功能导入github项目到码云上,然后再从码云下载 参考 https://blog.csdn.net/kcx64/article/details/83 ...

  9. 几篇关于MySQL数据同步到Elasticsearch的文章---第二篇:canal 实现Mysql到Elasticsearch实时增量同步

    文章转载自: https://mp.weixin.qq.com/s?__biz=MzI2NDY1MTA3OQ==&mid=2247484377&idx=1&sn=199bc88 ...

  10. Kettle ETL 来进行mysql 数据同步——试验环境搭建(表中无索引,无约束,无外键连接的情况)

    今天试验了如何在Kettle的图形界面(Spoon)下面来整合来mysql 数据库中位于不同数据库中的数据表中的数据. 试验用的数据表是customers: 第三方的数据集下载地址是:http://w ...

随机推荐

  1. 齐博x1标签之无刷新显示更多

    示范代码如下: <div class="ListMoreInfos"> {qb:tag name="news_list_page_listdata02&quo ...

  2. python不确定性计算之粗糙集属性约简

    粗糙集属性约简 本实验同时采用区别矩阵和依赖度约简. 在依赖度约简中,设置依赖度计算函数和相对约简函数,对读取的数据进行处理,最后根据依赖度约简. 在读取数据后判断有无矛盾,若有则进行决策表分解,然后 ...

  3. .Net Core - 使用事务IDbtransaction操作DBData

    New一个流程 获取数据库连接字符串,实例化SqlConnection 打来数据库连接 Begin当前连接的事务(IDbTransaction) 操作数据库(操作数据库的时候一定要使用当前连接和事务修 ...

  4. 浅谈--ETCD的基本概念及用法

    1. 简介 ETCD 是一个高可用的分布式键值数据库,可用于服务发现.ETCD 采用 raft 一致性算法,基于 Go 语言实现. raft是一个强一致的集群日志同步算法. ETCD使用gRPC,网络 ...

  5. 学习ASP.NET Core Blazor编程系列九——服务器端校验

    学习ASP.NET Core Blazor编程系列一--综述 学习ASP.NET Core Blazor编程系列二--第一个Blazor应用程序(上) 学习ASP.NET Core Blazor编程系 ...

  6. 死磕面试系列,Java到底是值传递还是引用传递?

    Java到底是值传递还是引用传递? 这虽然是一个老生常谈的问题,但是对于没有深入研究过这块,或者Java基础不牢的同学,还是很难回答得让人满意. 可能很多同学能够很轻松的背出JVM.分布式事务.高并发 ...

  7. 真正“搞”懂HTTP协议03之时间穿梭

    上一篇我们简单的介绍了一下DoD模型和OSI模型,还着重的讲解了TCP的三次握手和四次挥手,让我们在空间层面,稍稍宏观的了解了HTTP所依赖的底层模型,那么这一篇,我们来追溯一下HTTP的历史,看一看 ...

  8. 微信小程序的学习(一)

    一.小程序简介 1.小程序与普通网页开发的区别 运行环境不同 网页运行在浏览器环境中 小程序运行在微信环境中 API不同 小程序无法调用浏览器中的DOM和BOM的API 但是小程序可以调用微信环境提供 ...

  9. CSP-S2022 游寄

    前言:最后确实寄了,因为疫情,都没考成. \(8.26\) 占坑. \(8.23\) 参加浴谷月赛初赛模拟,报的 \(S\) 组,只有 \(71\) 分. \(8.25\) \(AK\) 了同学出的比 ...

  10. 图解S.O.L.I.D原则

    如果您熟悉面向对象的编程,那么您可能已经听说过SOLID原理. 这五项软件开发原则是构建软件时要遵循的准则,以便于扩展和维护. 它们受到软件工程师Robert C. Martin的欢迎. 在线上有很多 ...