1. 程式人生 > 實用技巧 >canal 踩坑實錄---這可能是你看到的最全最簡單的canal教程

canal 踩坑實錄---這可能是你看到的最全最簡單的canal教程

前排提示

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命令的 使用 yun 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

修改conf/application.yml 檔案

vim conf/application.yml


canal 1.1.4 使用

canal-1.1.4 預設不支援MySQL8

canal需要開啟mysql的binlog mysql8 預設支援binlog 以下需要開啟

docker 安裝的mysql 開啟binlog

進入容器內部

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

編輯my.cnf 檔案

vim /etc/mysql/my.cnf

沒有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 容器

啟動 canal-deployer

下載 canan-deployer 後首先修改 conf/example 資料夾下 instance.properties

canal.instance.master.address=192.168.142.132:3310     修改為自己的資料庫地址
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=



canal.instance.dbUsername=root                      修改為自己的資料庫使用者名稱
canal.instance.dbPassword=123456                    修改為自己的資料庫密碼 
canal.instance.connectionCharset = UTF-8
# enable druid Decrypt database password
canal.instance.enableDruid=false