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的配置多一些

原文地址:https://www.cnblogs.com/ccubee/p/14175322.html