Docker部署canal+canal-adapter同步MySql数据到ES

Cancal同步MySQL数据

参考博客:https://www.cnblogs.com/liuxuebagaomizhe/p/13809317.html

MySQL配置

  1. 查看MySQL是否开启binary log记录功能

    show variables like 'log_bin';

  2. 如果是OFF,在my.cnf(mysql配置文件)追加

    log-bin=mysql-bin #添加这一行就ok
    binlog-format=ROW #选择row模式
    server_id=1 #配置mysql replaction需要定义,不能和canal的slaveId重复
    
  3. 重启mysql

    docker restart mysql

  4. 再次查看MySQL是否开启binary log记录功能,确保是ON状态

    show variables like 'log_bin';

  5. 进入MySQL容器

    docker exec -it mysql bash

  6. 创建canal用户

    mysql -uroot -proot
    # 创建账号
    CREATE USER canal IDENTIFIED BY 'canal'; 
    # 授予权限
    GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';
    -- GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ;
    # 刷新并应用
    FLUSH PRIVILEGES;
    

docker安装cancal

  1. 拉取镜像

    docker pull canal/canal-server
    
  2. 启动并复制配置文件

    #启动镜像 
    docker run --name canal -d canal/canal-server
    #找到文件位置后 exit退出容器 将容器内部文件copy到外部
    docker cp canal:/home/admin/canal-server/conf/canal.properties /mydata/canal
    docker cp canal:/home/admin/canal-server/conf/example/instance.properties /mydata/canal
    
  3. 修改刚刚复制的instance文件

    vi /mydata/canal/instance.properties 
    
    ## 找到数据库信息,按需更改
    canal.instance.master.address=127.0.0.1:3306
    canal.instance.dbUsername=canal
    canal.instance.dbPassword=canal
    ## 按照需要同步的表选择
    canal.instance.filter.regex=db.table
    
  4. 重建一个容器

    #关闭容器
    docker stop canal
    
    #移除容器
    docker rm canal
    
    #启动新的 这里-v是将外部的文件挂载到容器内部 这样就不用每次启动都要配置参数了
    docker run --name canal -p 11111:11111 -d -v /mydata/canal/instance.properties:/home/admin/canal-server/conf/example/instance.properties -v /mydata/canal/canal.properties:/home/admin/canal-server/conf/canal.properties canal/canal-server
    

docker部署canal-adapter

  1. 拉取镜像

    docker pull slpcat/canal-adapter:v1.1.5

  2. 创建配置文件

    mkdir -p /mydata/canal-adapter/conf
    touch application.yml
    mkdir -p /mydata/canal-adapter/conf/es7
    cd es7
    touch ceshi.yml
    
  3. application.yml内容

    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
      flatMessage: true
      zookeeperHosts:
      syncBatchSize: 1000
      retries: 0
      timeout:
      accessKey:
      secretKey:
      consumerProperties:
        # canal tcp consumer
        canal.tcp.server.host: canal-server地址:11111
        canal.tcp.batch.size: 500
        canal.tcp.username:
        canal.tcp.password:
      srcDataSources:
        defaultDS:
          url: jdbc:mysql://数据库IP:数据库端口/数据库名?useUnicode=true
          username: db_username
          password: db_password
      canalAdapters:
      - instance: example # canal instance Name or mq topic name
        groups:
        - groupId: g1
          outerAdapters:
          - name: logger
          - name: es7 # 该版本发现只能是es7/es6
            hosts: esip地址:9300 # 127.0.0.1:9200 for rest mode
            properties:
              mode: transport # transport # or rest
    
  4. ceshi.yml文件,文件内容要对应数据库和esindex

    dataSourceKey: defaultDS
    destination: example
    groupId: g1
    esMapping:
      _index: ceshi
      _id: _id
      _type: _doc
      upsert: true
      #  pk: id
      sql: "SELECT a.id _id from t_ceshi a "
      #  objFields:
      #    _labels: array:;
      etlCondition: "where a.>={}"
      commitBatch: 3000
    
  5. 创建并启动容器,挂在刚刚创建的文件夹

    docker run --name canal-adapter -p 8081:8081 -v /mydata/canal-adapter/conf:/opt/canal-adapter/conf  -d slpcat/canal-adapter:v1.1.5
    
  6. 查看运行情况,不报错即可


    image-20210617150629160.png

你可能感兴趣的:(Docker部署canal+canal-adapter同步MySql数据到ES)