ES和MySQL数据同步(简略版)
Posted BethXxx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES和MySQL数据同步(简略版)相关的知识,希望对你有一定的参考价值。
一、在docker配置elasticsearch和kibana
1.注:elasticsearch和kibana的版本要一致
elesticsearch
--拉取镜像
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.1.0
--运行容器
docker run -it --name elasticsearch --restart=always -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.1.0
kibana
--拉取镜像
docker pull docker.elastic.co/kibana/kibana:7.1.0
--运行容器
docker run --name kibana -p 5601:5601 --link elasticsearch -d kibana:7.1.0
2.验证elesticsearch和kibana是否配置成功(输入url,出现界面则成功)
elasticsearch localhost:9200
kibana localhost:5601
二、修改mysql的配置
注:我的mysql版本号是:8.0.18
1.mysql的binlog日志主要用于数据库的主从复制和数据恢复。要通过mysql binlog将数据同步到ES集群中,要使用ROW模式(ROW模式可知道mysql中数据的修改内容)
--在dos窗口更改配置
#查看binlog模式
mysql> show variables like "%binlog_format%";
#开启binlog
mysql>set global log-bin=mysql-bin;
#修改binlog模式
mysql> set global binlog_format='ROW';
# 配置MySQL replaction需要定义
mysql>server_id=1;
--查看配置是否成功
mysql> show variables like 'log_bin';
mysql> show variables like "%binlog_format%";
mysql> show master status;
2.创建连接mysql的账号canal
CREATE USER canal IDENTIFIED BY ‘canal’;
3.授予权限
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON . TO ‘canal’@’%’;
4.刷新权限
FLUSH PRIVILEGES;
5.查看mysql数据库中的user表(成功如下)
三、canal-server
1.在docker中配置canal-server
--拉取镜像
docker pull canal/canal-server:v1.1.5
--运行容器
docker run --name canal-server -p 11111:11111 --link mysql:mysql -id canal/canal-server:v1.1.5
2.修改配置文件instance.properties
--进入canal-server容器
docker exec -it canal-server bash
--把instance.properties配置文件拷贝到桌面
docker cp canal-server:/home/admin/canal-server/conf/example/instance.properties C:\\Users\\Administrator\\Desktop
--获取mysql容器/镜像的元数据:用于下一步数据库地址的填写(另开一个Windows PowerShell)
docker inspect mysql
--修改instance.properties配置文件中的内容
(1)# position info
canal.instance.master.address=172.17.0.3:3306
(2)# username/password
canal.instance.dbUsername=canal #你的数据库账号
canal.instance.dbPassword=canal #你的数据库密码
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false
--将原有的instance.properties配置文件移除
(先进入到conf目录下,一路cd xxx...即可)
rm instance.properties #linux中只需输入首字母,再按Tab键即可生成完整文件名
--把桌面的instance.properties配置文件放回conf路径下
docker cp C:\\Users\\Administrator\\Desktop\\instance.properties canal-server:/home/admin/canal-server/conf/example
--重新启动canal-server容器
docker restart canal-server
四、canal-adapter
1.在docker中配置canal-adapter
--拉取镜像
docker pull slpcat/canal-adapter:v1.1.5
--运行容器
docker run --name canal-adapter -p 8081:8081 -d --link mysql:mysql --link elasticsearch:elasticsearch slpcat/canal-adapter:v1.1.5
2.修改配置文件
--进入canal-adapter容器
docker exec -it canal-adapter bash
--修改application.yml配置文件
--拷贝到桌面(在另开的Windows PowerShell中输入)
docker cp canal-adapter:/opt/canal-adapter/conf/application.yml C:\\Users\\Public\\Desktop
--查canal-server、elesticsearch的元数据
canal-server:172.17.0.5
elesticsearch:172.17.0.2
--修改文件内容
consumerProperties:
# canal tcp consumer
canal.tcp.server.host: 172.17.0.5:11111
canal.tcp.zookeeper.hosts:
canal.tcp.batch.size: 500
canal.tcp.username:
canal.tcp.password:
srcDataSources:
defaultDS:
url: jdbc:mysql://172.17.0.3:3306/jeecg-boot?useUnicode=true # 自己数据库的地址
username: canal #步骤二中新建的用户
password: canal
canalAdapters:
- instance: example
groups:
- groupId: g1
outerAdapters:
- name: es7
hosts: 172.17.0.2:9200
properties:
mode: rest
# security.auth: test:123456 # only used for rest mode
cluster.name: docker-cluster
--将原有的application.yml配置文件移除
(先进入到conf目录下,一路cd xxx...即可)
rm application.yml #linux中只需输入首字母,再按Tab键即可生成完整文件名
--把桌面的application.yml配置文件放回conf路径下
docker cp C:\\Users\\Public\\Desktop\\application.yml canal-adapter:/opt/canal-adapter/conf
--修改mytest_user.yml配置文件
--拷贝到桌面(在另开的Windows PowerShell中输入)
docker cp canal-adapter:/opt/canal-adapter/conf/es7/mytest_user.yml C:\\Users\\Public\\Desktop
--修改文件内容
dataSourceKey: defaultDS
destination: example
groupId: g1
esMapping:
_index: pm_index #此处是elesticsearch中建立的索引名(先建索引再改此配置文件)
_id: _id
_type: _doc
upsert: true
pk: id
#下方是想要同步的字段
sql: "select p.id as _id,
p.project_code,
p.pid,
p.project_name,
from pm p"
commitBatch: 3000
--将原有的mytest_user.yml配置文件移除
(先进入到conf目录下,一路cd xxx...即可)
rm mytest_user.yml #linux中只需输入首字母,再按Tab键即可生成完整文件名
--把桌面的mytest_user.yml配置文件放回conf路径下
docker cp C:\\Users\\Public\\Desktop\\mytest_user.yml canal-adapter:/opt/canal-adapter/conf/es7
--重新启动canal-adapter容器
docker restart canal-adapter
3.在kibana中如何新建索引(备注)
PUT pm
"mappings" :
"properties" :
"id" :
"type" : "text"
,
"pid" :
"type" : "text"
,
"project_code" :
"type" : "text"
,
"project_name" :
"type" : "text"
--查看索引结构是否创建成功
GET pm/_mapping
五、操作对应数据库
观察canal-adapter的日志,往数据库中插入数据,若log能监测到则证明es和mysql数据同步成功。
--同步完后,去kibana中查看
GET pm/_search
以上是关于ES和MySQL数据同步(简略版)的主要内容,如果未能解决你的问题,请参考以下文章
[es和数据库怎么同步]mysql与elasticsearch实时同步常用插件及优缺点对比(ES与关系型数据库同步)