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数据同步(简略版)的主要内容,如果未能解决你的问题,请参考以下文章

Mysql和ES数据同步方案汇总

Canal实现Mysql和ES数据同步

[es和数据库怎么同步]mysql与elasticsearch实时同步常用插件及优缺点对比(ES与关系型数据库同步)

MySQL数据同步ES的常用思路和方法

[es和mysql数据库同步]推荐一个同步Mysql数据到Elasticsearch的工具

[es和数据库怎么同步]实现ES和MySQL数据库同步解决方案