zoukankan      html  css  js  c++  java
  • canal 踩坑实录---这可能是你看到的最全最简单的canal教程

    前排参考文章

    超详细的Canal入门,看这篇就够了!
    【Linux学习】解决Linux环境下执行脚本时报错:/bin/bash^M: 坏的解释器: 没有那个文件或目录

    前排提示

    canal1.1.5 比1.1.4 优化了很多 但是正式版还没发布 可以自己打包使用
    对比

    • 1.1.5 默认支持mysql8 mysql8 默认打开binlog 默认支持utf8
    • 1.1.4 默认是mysql8以下 需要手动打开binlog日志 需要手动设置utf8
    • canal 在window下启动 问题很多 最后是在linux下测试

    win下可能会遇到的问题 config not found 由于win下不知道为什么老是去同文件夹下class里找对应的rdb等文件夹 还是不要在win下测试了
    如果要在win下测试的话 建议在idea直接启动程序

    github下载比较慢 早上应该会好一下
    canal下载地址
    github 下载比较慢 可以自己下载打包 canal-adapter
    canal-deployer 可以在这下载

    canal-deployer

    canal-deployer 1.1.4 跟1.1.5区别不大 可以使用同样的 主要是canal-adapter 有区别
    可以下载 也可以下载代码打包生成

    克隆代码

    git clone https://gitee.com/mirrors/canal.git
    

    下载完用idea打开 可以用maven插件 clean package打包
    也可以用maven命令打包

    mvn clean package -DskipTests
    

    如果是打包上传的 解压后需要给启动关闭文件赋权限

    打包完在 canal-deployer arget下的canal下 压缩成zip文件 上传到linux服务器 使用 unzip -x 文件名 进行解压
    没有unzip命令的 使用 yum install unzip 进行安装 canal-adapter 也是一样

    chmod u+x startup.sh stop.sh restart.sh
    

    直接启动会报错/bin/bash^M: 坏的解释器: 没有那个文件或目录 报错原因
    使用 sed -i 's/ $//' startup.sh stop.sh restart.sh 命令修复 后面adapter 上传也是这样

    修改 conf/example/instance.properties

    vim conf/example/instance.properties
    
    # position info
    canal.instance.master.address=127.0.0.1:3306     连接的数据库地址 需要跟后面adapter srcDataSource一致
    canal.instance.master.journal.name=
    canal.instance.master.position=
    canal.instance.master.timestamp=
    canal.instance.master.gtid=
    
    # rds oss binlog
    canal.instance.rds.accesskey=
    canal.instance.rds.secretkey=
    canal.instance.rds.instanceId=
    
    # table meta tsdb info
    canal.instance.tsdb.enable=true
    #canal.instance.tsdb.url=jdbc:mysql://127.0.0.1:3306/canal_tsdb
    #canal.instance.tsdb.dbUsername=canal
    #canal.instance.tsdb.dbPassword=canal
    
    #canal.instance.standby.address =
    #canal.instance.standby.journal.name =
    #canal.instance.standby.position =
    #canal.instance.standby.timestamp =
    #canal.instance.standby.gtid=
    
    # username/password
    canal.instance.dbUsername=canal             连接的数据库用户名  需要跟后面adapter srcDataSource一致
    canal.instance.dbPassword=canal             连接的数据库密码
    canal.instance.connectionCharset = UTF-8
    # enable druid Decrypt database password
    canal.instance.enableDruid=false
    
    

    使用 startup.sh 启动canal-deployer

    canal-adapter 1.1.5 使用

    canal-adapter目前还没发正式版到了 v1.1.5-alpha-2 版 可以自己下载(下载比较慢) 也可以克隆后自己打包
    将文件上传到linux服务器后 文件夹也是一样的 conf bin logs lib plugins

    修改conf/application.yml 文件
    默认srcDataSource是注释的 我们需要打开 配置的地址跟deployer一致 密码一致
    下面的rdb是我们需要同步的方式 这里以 同步到mysql为例 key需要跟conf/rdb 里面的一致 可以设置不同库的相同表

    vim conf/application.yml
    
    srcDataSources:
        defaultDS:
          url: jdbc:mysql://192.168.142.131:3306/demo_user?useUnicode=true
          username: root
          password: 123456
      canalAdapters:
      - instance: example # canal instance Name or mq topic name
        groups:
        - groupId: g1
          outerAdapters:
          - name: logger
          - name: rdb
            key: mysql1
            properties:
              jdbc.driverClassName: com.mysql.jdbc.Driver
              jdbc.url: jdbc:mysql://127.0.0.1:3306/demo_user?useUnicode=true
              jdbc.username: root
              jdbc.password: 123456
    

    配置同步文件yml 可以复制原来的进行修改

    dataSourceKey: defaultDS
    destination: example
    groupId:
    outerAdapterKey: mysql1
    concurrent: true
    dbMapping:
      database: demo_user   数据库
      table: t_user         数据表
      targetTable: demo_user.t_user1   需要同步的数据库数据表   
      targetPk:
        id: id
    #  mapAll: true
      targetColumns:            同步的字段
        id:
        wx_id:
        wx_nickname:
        roles:
        avatar_url:
        create_time:
        update_time:
        bonus:
      etlCondition: "where c_time>={}"
      commitBatch: 3000 # 批量提交的大小
    
    
    ## Mirror schema synchronize config
    #dataSourceKey: defaultDS
    #destination: example
    #groupId: g1
    #outerAdapterKey: mysql1
    #concurrent: true
    #dbMapping:
    #  mirrorDb: true
    #  database: mytest
    
    

    canal 1.1.4 使用

    canal-1.1.4 默认不支持 MySQL8

    canal需要开启mysql的binlog mysql8 默认支持binlog 以下需要开启

    docker 安装的mysql 开启binlog

    进入容器内部

    docker exec -it 容器id(容器名称) /bin/bash
    

    登录mysql 查看是否开始binlog 查看编码格式

    mysql -uroot -p 
    密码
    
    # 查看编码
    show variables like 'char%';
    
    # 查看是否开始binlog
    show variables like 'log_bin';
    

    编辑my.cnf 文件

    vim /etc/mysql/my.cnf
    

    没有vim命令的进行安装 在容器内安装vim

    apt-get update
    apt-get install vim
    

    报下面错误

    Err http://security.debian.org wheezy/updates/main amd64 Packages              
    
    Err http://security.debian.org wheezy/updates/main amd64 Packages              
    
    Err http://security.debian.org wheezy/updates/main amd64 Packages              
    
    Err http://security.debian.org wheezy/updates/main amd64 Packages              
    
    Err http://security.debian.org wheezy/updates/main amd64 Packages
    

    使用以下命令替换 后 重新安装vim命令

    # 更新apt-get源
    mv /etc/apt/sources.list /etc/apt/sources.list.bak && 
    echo "deb http://mirrors.aliyun.com/debian stretch main contrib non-free" >/etc/apt/sources.list && 
    echo "deb-src http://mirrors.aliyun.com/debian stretch main contrib non-free" >>/etc/apt/sources.list && 
    echo "deb http://mirrors.aliyun.com/debian stretch-updates main contrib non-free" >>/etc/apt/sources.list && 
    echo "deb-src http://mirrors.aliyun.com/debian stretch-updates main contrib non-free" >>/etc/apt/sources.list && 
    echo "deb http://mirrors.aliyun.com/debian-security stretch/updates main contrib non-free" >>/etc/apt/sources.list && 
    echo "deb-src http://mirrors.aliyun.com/debian-security stretch/updates main contrib non-free" >>/etc/apt/sources.list
    
    

    添加以下配置

    [mysqld]
    # 打开binlog
    log-bin=mysql-bin
    # 选择ROW(行)模式
    binlog-format=ROW
    # 配置MySQL replaction需要定义,不要和canal的slaveId重复
    server_id=1
    character-set-server=utf8
    [client]
    default-character-set=utf8
    [mysql]
    default-character-set=utf8
    

    然后重启mysql 容器

    docker restart mysql容器
    

    启动服务 配置好相应的文件就可以了
    1.1.4 主要是mysql的配置多一些

  • 相关阅读:
    转:高并发场景下强一致预算/库存扣减方案
    转:Dubbo性能调优参数及原理
    转:java线程状态说明,Jstack线程状态BLOCKED/TIMED_WAITING/WAITING解释
    使用增强学习法之SQ3R主动阅读
    建立实用投资计划
    使用smarty方法实现目标
    主动学习
    小知识
    大脑的处理模式
    真正的随笔
  • 原文地址:https://www.cnblogs.com/ccubee/p/14175322.html
Copyright © 2011-2022 走看看