Canal实现数据同步笔记

Canal实现mysql主从同步

1. Canal安装

  1. 主库Mysql打开binlog,

    • 从库要求数据库名称和表名称,表结构与主库一致

    • mysql添加用户权限,可以远程访问的用户权限

  2. 安装Canal-阿里的组件

    安装在你要同步的主库的系统下

  3. 编辑Canal配置文件 /config/example/instance.properties 配置文件

在这里插入图片描述

  1. 打开canal /bin/startup.sh

2. SpringBoot整合Canal-客户端

  1. 创建一个模块canal-client

  2. 引入依赖

    <dependency>
      <groupId>com.alibaba.otter</groupId>
      <artifactId>canal.client</artifactId>
      <version>1.1.5</version>
    </dependency>
    <!--jdbc,mysql,mybatis的依赖也要导入-->
    
  3. 配置application文件

    • 服务端口

    • 服务名

    • 环境设置 spring.profiles.active=dev //dev,text,prod

    • mysql数据库连接

  4. 创建canal客户端类,在启动类执行

    • canal客户端类,固定,直接复制即可
  5. 主启动类实现CommandLineRunner接口,实现run方法

    • 注入canal客户端类

    • 在实现的run方法中启动

      @Autowired
      private CanalClient canalClient;
      
      public void run (...)...{
          //启动项目,执行canal客户端监听
          canalClient.run();
      }
      
  6. 开启服务,主库新增修改数据, 查看从库是否改变

mysql同步到ES,

**同步到不是mysql的需要使用适配器canal.adapter**—注意服务端还是要的canal.deployer

地址: https://github.com/alibaba/canal/releases,下载源码使用即可,或者下载压缩包,在linux中使用

  1. 准备一个数据库

  2. 准备一个es,创建映射

  3. 修改adapter的配置文件 - canal-adapter/conf/application.yml

    canal.conf:
      mode: tcp
      canalServerHost: 192.168.35.254:11111
      batchSize: 500
      syncBatchSize: 1000
      retries: 0
      timeout:
      accessKey:
      secretKey:
      srcDataSources:
        defaultDS:
          url: jdbc:mysql://192.168.34.66:3306/canal_tsdb?useUnicode=true
          username: canal
          password: canal
      canalAdapters:
      - instance: example
        groups:
        - groupId: g1
          outerAdapters:
           - name: logger
           - name: es
             hosts: es启动的ip地址:9300
             properties:
               cluster.name: elasticsearch
    
  4. 修改adapter配置文件canal-adapter/conf/test1.yml

    dataSourceKey: defaultDS
    destination: example
    groupId: g1
    esMapping:
      _index: test1
      _type: _doc
      _id: _id
      upsert: true
      sql: "select a.id as _id,a.name,a.address from canal_tets a"
      commitBatch: 3000
    

注意:

  1. 两个配置文件的groupid应该是一致的

  2. es同步关键在于Sql语句, 他能把表上的字段映射到es中的mapping中

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值