前排參考文章
超詳細的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的配置多一些