• docker mysql自动同步到es


    测试版本: mysql:5.7  ;  es:5.6.4  ;   elasticsearch-head:5  ; kibana:5.6.4 ; go-mysql-elasticsearch(mysql 数据自动同步到es的工具)

    重要的事情说三遍:

    • es 的东西,版本一点都不能差。
    • es 的东西,版本一点都不能差。
    • es 的东西,版本一点都不能差。

    kibana版本对应上

    docker search kibana:5.6.4 
    这种方式一般就能找到版本

    IK (es 的中文分词,版本对应上)

     https://github.com/medcl/elasticsearch-analysis-ik

    go-mysql-elasticsearch

     所支持的MySQL版本小于8.0. 所支持的ES版本小于6.0. mysql binlog的格式必须为row格式.

    docker-compose file 构建如下(内部的XXX 替换成实际的值):

    version: "3"
    services:
      elasticsearch:
        image: docker.elastic.co/elasticsearch/elasticsearch:5.6.4
        container_name: es5.6
        environment:
          - TZ=Asia/Shanghai
        restart: always
        environment:
          - cluster.name=elastomer5.6
          - bootstrap.memory_lock=true
          - discovery.type=single-node
          - xpack.monitoring.enabled=false
          - xpack.security.enabled=false
          - xpack.watcher.enabled=false
          - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
        volumes:
          - XXX/ik:/usr/share/elasticsearch/plugins/ik
          - XXX/data:/usr/share/elasticsearch/data
          - XXX/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
        ports:
          - "9200:9200"
      es-head:
        image: mobz/elasticsearch-head:5
        container_name: es-head
        restart: always
        ports:
          - "9100:9100"
      kibana:
        image: docker.elastic.co/kibana/kibana:5.6.4
        container_name: kibana
        restart: always
        ports:
          - "5601:5601"
        depends_on:
          - elasticsearch
          - mysql
      go-mysql-elasticsearch:
        image: eaglechen/go-mysql-elasticsearch
        container_name: mysql2es
        restart: always
        volumes:
          - XXX/river.toml:/go_mysql_river.toml:ro
      command: -config /go_mysql_river.toml
        depends_on:
          - elasticsearch
      mysql:
        container_name: mysql5.7
        restart: always
        build: mysql5.7
        command:
          --character-set-server=utf8mb4
          --collation-server=utf8mb4_general_ci
          --explicit_defaults_for_timestamp=true
          --lower_case_table_names=1
          --max_allowed_packet=128M
          --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
        environment:
          TZ: Asia/Shanghai
          MYSQL_ROOT_PASSWORD: XXX
        ports:
          - "3306:3306"
        volumes:
          - XXX/data:/var/lib/mysql 
    

    相关配置文件:

    river.toml 配置见  https://github.com/go-mysql-org/go-mysql-elasticsearch/blob/master/etc/river.toml
    ik:下载见 https://github.com/medcl/elasticsearch-analysis-ik
    elasticsearch.yml:
    cluster.name: "docker-cluster"
    network.host: 0.0.0.0
    
    # minimum_master_nodes need to be explicitly set when bound on a public IP
    # set to 1 to allow single node clusters
    # Details: https://github.com/elastic/elasticsearch/pull/17288
    discovery.zen.minimum_master_nodes: 1
    # 开启前端访问的跨域. (使用es-head 工具访问的时候,前端有跨域问题,这里允许跨域)
    http.cors.enabled: true
    http.cors.allow-origin: "*"

    mysql5.7的Dockerfile:

    FROM mysql:5.7
    
    COPY mysqld.cnf /etc/mysql/mysql.conf.d/
    

    mysqld.cnf文件示例:

    #
    # The MySQL  Server configuration file.
    #
    # For explanations see
    # http://dev.mysql.com/doc/mysql/en/server-system-variables.html
    
    [mysqld]
    pid-file	= /var/run/mysqld/mysqld.pid
    socket		= /var/run/mysqld/mysqld.sock
    datadir		= /var/lib/mysql
    #log-error	= /var/log/mysql/error.log
    # By default we only accept connections from localhost
    #bind-address	= 127.0.0.1
    # Disabling symbolic-links is recommended to prevent assorted security risks
    symbolic-links=0
    
    #以下是启动log-bin的配置
    log-bin = binlog
    server-id=1
    binlog-format = ROW
    binlog_rows_query_log_events = off
    

      写在后面的话:

    1、canal 等工具没有go-mysql-elasticsearch 部署、配置简单。

    2、不要随便尝试build es,那可能会让你郁闷一天。退而求其次,使用-v 挂载吧

    3、docker-compose 文件书写注意事项:

    • 每个services 下面的key 名,随便命名。
    • container_name 随便命名
    • build 后面的值,写含Docker file 的文件夹名。
    • depends_on 写services 下面的key 名。详见 docker-compose 文件规范。
    附:es中关于type(就是5.X之前的table 的意思。就是es 的高版本,不支持table 了,只支持db) 的版本迭代
    5.x 及以前版本,一个 index 有一个或者多个 type
    6.x 版本,一个 index 只有一个 type
    7.x 版本移除了 type,type 相关的所有内容全部变成 Deprecated,为了兼容升级和过渡,所有的 7.x 版本 es 数据写入后 type 字段都默认被置为 “_doc”
    8.x 版本完全废弃 type

  • 相关阅读:
    【基础】Attribute的妙用
    【翻译】.Net Core的意义
    【基础】迭代器详解
    【总结】数据库索引的实现原理
    【实践】基于接口的插件机制
    【总结】设计模式应用之单例模式
    【基础】多线程更新窗体UI的若干方法
    【基础】MVC路由规则
    Mybatis 分页:Pagehelper + 拦截器实现
    这四种对象属性拷贝方式,你都知道吗?
  • 原文地址:https://www.cnblogs.com/xunhanliu/p/15752582.html
Copyright © 2020-2023  润新知