作者:田超凡
日期:2025年6月7日
Canal安裝,啟動端口11111、8082:
安裝canal-deployer服務端:
https://github.com/alibaba/canal/releases/1.1.7/canal.deployer-1.1.7.tar.gz
?
cd? /opt/homebrew/etc
mkdir canal-deployer
tar -zxvf?canal.deployer-1.1.7.tar.gz
?
修改配置文件:
vi conf/canal.properties
canal.ip = 127.0.0.1
?
vi example/instance.properties
# 需要同步數據的MySQL地址
canal.instance.master.address=127.0.0.1:3306
canal.instance.master.journal.name=
canal.instance.master.position=
canal.instance.master.timestamp=
canal.instance.master.gtid=
# 用于同步數據的數據庫賬號
canal.instance.dbUsername=賬號
# 用于同步數據的數據庫密碼
canal.instance.dbPassword=密碼
# 數據庫連接編碼
canal.instance.connectionCharset = UTF-8
# 需要訂閱binlog的表過濾正則表達式
canal.instance.filter.regex=.*\\..*
?
啟動canal-deployer
到 bin 目錄下,執行命令:./startup.sh
日志:logs/canal
?
踩坑:
1 canal-deployer啟動報錯
canal/logs/canal/canal_stdout.log 報錯:
Unrecognized VM option 'AggressiveOpts'Error: Could not create the Java Virtual Machine.Error: A fatal exception has occurred. Program will exit.
Plain Text
?
解決方案:
修改canal/bin/startup.sh:
移除AggressiveOpts、UseBiasedLocking 等 JDK 21中已經不在支持的配置,重新啟動.
?
2 安裝canal-adapter客戶端:
https://github.com/alibaba/canal/releases/1.1.7/canal.adapter-1.1.7.tar.gz
?
cd? /opt/homebrew/etc
mkdir canal-adapter
tar -zxvf?canal.adapter-1.1.7.tar.gz
?
修改配置文件:
vi conf/application.properties
port:8082
踩坑:hosts要配置成:http://127.0.0.1:9200,不然會報錯
java.lang.RuntimeException: java.lang.IllegalArgumentException: Illegal character in scheme name at index 0: 127.0.0.1:9200
?
繼續修改es8配置文件:
vi conf/es8/mytest_user.yml
dataSourceKey: defaultDS
destination: example
groupId: g1
esMapping:
? _index: users
? _id: _id
? #? upsert: true
? #? pk: id
? sql: "select t.id as _id, t.nick_name as? nick_name, t.state as state,t.telephone as telephone? from users as t"
? #? objFields:
? #? ? _labels: array:;
? #etlCondition: "where a.c_time>={}"
? commitBatch: 3000??
?
修改bin/start.sh
移除AggressiveOpts、UseBiasedLocking 等 JDK 21中已經不在支持的配置,重新啟動.
?
啟動canal-adapter客戶端:
cd canal-adapter/bin
./startup.sh
日志目錄:logs/adapter/adapter.log
踩坑:必須先啟動mysql8和es8,否則無法啟動canal-deployer和canal-adapter
?
canal-deployer服務端(Canal Server)運行端口:11111
canal-adapter客戶端(Canal Client)運行端口:8082
?
?
?
測試同步mysql到es8:
登錄Kibana,DevTool:
PUT users
{
? "mappings": {
? ? "properties": {
? ? ? "nickname": {
? ? ? ? "type": "text"
? ? ? },
? ? ? "telephone": {
? ? ? ? "type": "text"
? ? ? },
? ? ? "state": {
? ? ? ? "type": "text"
? ? ? }
? ? }
? }
}
?
user表插入一條數據:
INSERT INTO `users` (`id`,`gmt_create`,`gmt_modified`,`nick_name`,`password_hash`,`state`,`telephone`,`user_role`) VALUES (14,'2024-04-18 17:47:40','2024-04-18 17:47:42','test11111','c2975f0faec10adca0ecd729c8cbc0aa','INIT','13000000000','CUSTOMER')
?
GET users/_search
{"_source": ["nick_name","telephone","state"],
? "query": {
? ? "match": {
? ? ? "nick_name": "test11111"
? ? }
? }
}
?
?
DELETE users
?