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/\r$//' 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的配置多一些


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM