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下載比較慢 早上應該會好一下
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