1. 程式人生 > >mysql-canal-rabbitmq 安裝部署教程

mysql-canal-rabbitmq 安裝部署教程

[原文](https://www.cnblogs.com/memento/p/14497908.html) ## 1.1. 開啟 MySQL 的 binlog 日誌 1. 修改 `my.cnf` 或 `my.ini`(windows), 新增配置項: ```ini # binlog 日誌存放路徑 log-bin=D:\env\mysql-5.7.28-winx64\binlog # 日誌中記錄每一行資料被修改的形式 binlog-format=ROW # 當前機器的服務 ID, 如果為叢集時不能重複 server_id=1 ``` 2. 重啟 mysql 服務後, 檢視配置變數是否生效: ```mysql mysql> show variables like '%log_bin%'; +---------------------------------+----------------------+ | Variable_name | Value | +---------------------------------+----------------------+ | log_bin | ON | | log_bin_basename | D:\env\mysql-5 | | log_bin_index | D:\env\mysql-5.index | | log_bin_trust_function_creators | OFF | | log_bin_use_v1_row_events | OFF | | sql_log_bin | ON | +---------------------------------+----------------------+ 6 rows in set, 1 warning (0.00 sec) ``` 3. 配置 mysql 資料庫的 `canal` 使用者 `mysql -uroot -p` 登入 mysql, 建立並授權使用者 `canal`; ```mysql CREATE USER canal IDENTIFIED BY 'canal'; GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; FLUSH PRIVILEGES; ``` ## 1.2. 配置 rabbitmq Exchanges 和 Queues 1. 新建 `Queue` ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091134562-1825999838.png) 2. 新建 `Exchange` ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091134832-2001082232.png) 3. 設定 Queue 裡的 Bindings, 填寫 `Exchange` 名稱, 以及路由 `Routing key`; ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091135214-1447572207.png) ## 1.3. 安裝單機 canal ### 1.3.1. 下載安裝 [下載](https://github.com/alibaba/canal/releases) 並解壓縮; ``` sudo wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz sudo tar -zxvf canal.deployer-1.1.4.tar.gz ``` 最新版本 `1.1.5`的安裝 ``` sudo wget https://github.com/alibaba/canal/releases/download/canal-1.1.5-alpha-1/canal.deployer-1.1.5-SNAPSHOT.tar.gz sudo tar -zxvf canal.deployer-1.1.5-SNAPSHOT.tar.gz ``` ### 1.3.2. 配置檔案 #### 1.3.2.1. 節點配置檔案 canal.properties ```conf # tcp bind ip, 當前節點的 IP 地址 canal.ip = 192.168.2.108 # register ip to zookeeper, 註冊到 ZK 的 IP 地址, 如下圖1. canal.register.ip = 192.168.2.108 canal.zkServers = zk叢集 # tcp, kafka, RocketMQ, 最新版本 1.1.5 可以直接連線 rabbitmq canal.serverMode = rabbitmq # destinations, 當前 server 上部署的 instance 列表, 對應各個例項資料夾(../conf/)名稱 canal.destinations = example2 # 設定 mq 伺服器地址, 此處為 rabbitmq 的伺服器地址 # !! 此處下載後預設的配置是有配置IP:埠的 # rabbitmq 此處則不需要配置埠 canal.mq.servers = 192.168.208.100 # 一下幾項均為 1.1.5 新版本新增支援 rabbitmq 的配置 canal.mq.vhost=/ canal.mq.exchange=example2-ex # 指定 rabbitmq 上的 exchange 名稱, "新建 `Exchange`" 步驟新建的名稱 canal.mq.username=admin # 連線 rabbitmq 的使用者名稱 canal.mq.password=**** # 連線 rabbitmq 的密碼 canal.mq.aliyunuid= ``` ![圖1. canal 註冊到 zk 上的節點](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091135467-237960350.png) #### 1.3.2.2. 例項配置檔案 instance.properties ```conf # position info, 資料庫的連線資訊 canal.instance.master.address=192.168.2.108:3306 # 以下兩個配置, 需要在上面配置的 address 的資料庫中執行 `SHOW MASTER STATUS` 獲取的 `File` 和 `Position` 兩個欄位值 canal.instance.master.journal.name=mysql-5.7 canal.instance.master.position=674996 # table meta tsdb info, 禁用 tsdb 記錄 table meta 的時間序列版本 canal.instance.tsdb.enable=false # username/password, 例項連線資料的使用者名稱和密碼 canal.instance.dbUsername=canal canal.instance.dbPassword=canal # table regex, 正則匹配需要監聽的資料庫表 canal.instance.filter.regex=ysb\\.useropcosttimes_prod # mq config, 指定 rabbitmq 設定繫結的路由, 詳見"配置rabbitmq"步驟裡的第三步配置的`Routing key` canal.mq.topic=example2-routingkey ``` ### 1.3.3. 啟動 canal 服務 Linux 對應的啟動指令碼 `./bin/startup.sh`, Windows 對應的啟動指令碼 `./bin/startup.bat`; 以 Windows 為例: ``` λ .\startup.bat start cmd : java -Xms128m -Xmx512m -XX:PermSize=128m -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dapplication.codeset=UTF-8 -Dfile.encoding=UTF-8 -server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=9099,server=y,suspend=n -DappName=otter-canal -Dlogback.configurationFile="d:\env\green\canal-1.1.5\bin\\..\conf\logback.xml" -Dcanal.conf="d:\env\green\canal-1.1.5\bin\\..\conf\canal.properties" -classpath "d:\env\green\canal-1.1.5\bin\\..\conf\..\lib\*;d:\env\green\canal-1.1.5\bin\\..\conf" java -Xms128m -Xmx512m -XX:PermSize=128m -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dapplication.codeset=UTF-8 -Dfile.encoding=UTF-8 -server -Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=9099,server=y,suspend=n -DappName=otter-canal -Dlogback.configurationFile="d:\env\green\canal-1.1.5\bin\\..\conf\logback.xml" -Dcanal.conf="d:\env\green\canal-1.1.5\bin\\..\conf\canal.properties" -classpath "d:\env\green\canal-1.1.5\bin\\..\conf\..\lib\*;d:\env\green\canal-1.1.5\bin\\..\conf" com.alibaba.otter.canal.deployer.CanalLauncher Java HotSpot(TM) Server VM warning: ignoring option PermSize=128m; support was removed in 8.0 Listening for transport dt_socket at address: 9099 ``` 最後手動修改資料庫資料, 或者等待其他的修改, 再檢視一下 rabbitmq 上的監控即可知道流程是否走通了. ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091135741-972822539.png) ## 1.4. 安裝叢集 canal ### 1.4.1. 安裝 canal-admin #### 1.4.1.1. 下載安裝 [下載](https://github.com/alibaba/canal/releases/download/canal-1.1.5-alpha-1/canal.admin-1.1.5-SNAPSHOT.tar.gz)並解壓縮 ``` sudo wget https://github.com/alibaba/canal/releases/download/canal-1.1.5-alpha-1/canal.admin-1.1.5-SNAPSHOT.tar.gz sudo tar -zxvf canal.admin-1.1.5-SNAPSHOT.tar.gz ``` #### 1.4.1.2. 配置檔案 > `application.yml` ``` server: port: 8089 spring: jackson: date-format: yyyy-MM-dd HH:mm:ss time-zone: GMT+8 spring.datasource: address: 192.168.2.108:3306 database: canal_manager username: canal password: canal driver-class-name: com.mysql.jdbc.Driver # 資料庫連線字串末尾需新增`serverTimezone=UTC`, 否則啟動時會報時區異常; url: jdbc:mysql://${spring.datasource.address}/${spring.datasource.database}?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC hikari: maximum-pool-size: 30 minimum-idle: 1 canal: # 配置 canal-admin 的管理員賬號和密碼 adminUser: admin adminPasswd: 123456 ``` > `canal_manager.sql` 在管理`canal-admin`資料的資料庫中執行該 sql 指令碼, 初始化一些表; #### 1.4.1.3. 啟動 canal-admin 服務 Linux 對應的啟動指令碼 `./bin/startup.sh`, Windows 對應的啟動指令碼 `./bin/startup.bat`; 以 Windows 為例: ``` λ .\startup.bat start cmd : java -Xms128m -Xmx512m -Djava.awt.headless=true -Djava.net.preferIPv4Stack=true -Dapplication.codeset=UTF-8 -Dfile.encoding=UTF-8 -DappName=canal-admin -classpath "D:\env\green\canal-1.1.5-admin\bin\\..\conf\..\lib\*;D:\env\green\canal-1.1.5-admin\bin\\..\conf" com.alibaba.otter.canal.admin.CanalAdminApplication 2020-04-13 20:01:39.495 [main] INFO com.alibaba.otter.canal.admin.CanalAdminApplication - Starting CanalAdminApplication on Memento-PC with PID 50696 (D:\env\green\canal-1.1.5-admin\lib\canal-admin-server-1.1.5-SNAPSHOT.jar started by Memento in D:\env\green\canal-1.1.5-admin\bin) 2020-04-13 20:01:39.527 [main] INFO com.alibaba.otter.canal.admin.CanalAdminApplication - No active profile set, falling back to default profiles: default 2020-04-13 20:01:39.566 [main] INFO o.s.b.w.s.c.AnnotationConfigServletWebServerApplicationContext - Refreshing org.springframework.boot.web.servlet.context.AnnotationConfigServletWebServerApplicationContext@13a5bf6: startup date [Mon Apr 13 20:01:39 CST 2020]; root of context hierarchy 2020-04-13 20:01:41.149 [main] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat initialized with port(s): 8089 (http) 2020-04-13 20:01:41.166 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Initializing ProtocolHandler ["http-nio-8089"] 2020-04-13 20:01:41.176 [main] INFO org.apache.catalina.core.StandardService - Starting service [Tomcat] 2020-04-13 20:01:41.177 [main] INFO org.apache.catalina.core.StandardEngine - Starting Servlet Engine: Apache Tomcat/8.5.29 ... 2020-04-13 20:01:42.996 [main] INFO org.apache.coyote.http11.Http11NioProtocol - Starting ProtocolHandler ["http-nio-8089"] 2020-04-13 20:01:43.007 [main] INFO org.apache.tomcat.util.net.NioSelectorPool - Using a shared selector for servlet write/read 2020-04-13 20:01:43.019 [main] INFO o.s.boot.web.embedded.tomcat.TomcatWebServer - Tomcat started on port(s): 8089 (http) with context path '' 2020-04-13 20:01:43.024 [main] INFO com.alibaba.otter.canal.admin.CanalAdminApplication - Started CanalAdminApplication in 3.919 seconds (JVM running for 5.241) ``` #### 1.4.1.4. 注意事項 `canal-admin` 連線資料庫的賬號, 必須有建表, 讀寫資料的許可權, 如果還是採用上文中建立的 `canal` 賬號, 需要另外擴充套件一下許可權: ``` GRANT ALL PRIVILEGES ON *.* TO 'canal'@'%' ; ``` ### 1.4.2. 新增單機 canal-server 節點 #### 1.4.2.1. 啟動 canal-server 節點服務 單機 canal-server 照常啟動, 此時, canal-server 預設載入的 `../conf/canal.properties` 裡的配置資訊, 可以從 `../bin/startup.bat[startup.sh]` 指令碼中獲悉, 獲取從執行的指令碼命令提示裡獲悉; #### 1.4.2.2. 新建單機 server 在 `canal-admin` 中新建一個單機 `server` ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091136005-1069218663.png) 該 `server` 會自動識別已啟動的 `canal-server` 節點, 但是此時由 `admin` 接管後, 不會自動載入 `../conf/canal.properties` 的配置檔案, 點選最右側的 `操作-配置` 檢視, 該 server 載入的是預設的配置資訊 ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091136233-2091708899.png) ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091136474-160987792.png) 需要手動將 `1.3.2` 中配置好的 `../conf/canal.properties` 裡的配置資訊拷貝到該配置裡進行覆蓋! #### 1.4.2.3. 新建例項 instance 手動在 `canal-admin` 中新建一個 `instance`, 對應單機 `canal-server` 配置下的例項 `example2`; 同樣, 需要手動將 `./conf/<例項名稱>/instance.properies` 配置檔案手動拷貝到 admin 中 ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091136869-972020812.png) ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091137163-1746575513.png) **!!注意** 在新建或啟動 `instance` 例項時, 先刪除例項資料夾下的 `meta.dat` 檔案, 並更新 `canal.instance.master.journal.name=...`, `canal.instance.master.position=...` 兩個配置項; ### 1.4.3. 新增叢集 canal-server 節點 #### 1.4.3.1. 新建叢集 需要指定叢集名稱, 以及配置叢集繫結的 `zookeeper` 叢集地址; ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091137394-1518151164.png) 新建成功後, 在最右側的 `操作-主配置` 中配置叢集的通用 server 配置資訊 ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091137622-888447436.png) 此處也可以將之前配置的 `../conf/canal.properties` 配置直接拷貝過來, 稍微修改一下就可以用了 ``` # canal admin config canal.admin.manager = 192.168.2.108:8089 canal.instance.global.mode = manager ``` #### 1.4.3.2. 新建 server 指定所屬叢集, 為 `1.4.3.1` 中設定的叢集名稱; ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091137963-2003338516.png) 如果先前已經啟動了 `canal-server` 節點服務, 則新建的 server 會自動識別為 `啟動` 狀態, 否則為 `斷開` 狀態; ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091138203-1070724378.png) **這裡有一點需要十分注意的地方** 細心的人可能會發現, 除了 `canal.properties` 配置檔案, 還有一個 `canal_local.properties` 的配置檔案, 後者比前者的內容少了很多, 因為這個檔案就是用於搭建 `canal` 叢集時, 本地節點的配置檔案, 而前者配置檔案裡的其他資訊都是交由 `canal-admin` 集中配置管理的; 在 `./bin/startup.bat[startup.sh]` 啟動腳本里, 預設是載入 `canal.properties` 配置檔案, 即以單機形式啟動的服務; windows 在搭建 `canal` 叢集時, 需要手動修改 `startup.bat`, 藍色標註處是載入 `%canal_conf%` 變數的配置檔案路徑, 所以需要將紅色框內的變數調整為: ``` @rem set canal_conf=... set canal_conf=%conf_dir%\canal_local.properties ``` 使啟動時載入 `canal_local.properties` 的配置檔案 ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091138420-198461428.png) #### 1.4.3.3. 新建 instance 此處配置也可以基於單機 server 中的例項 `1.4.2.3` 配置進行調整使用; ``` # 2. position info, 指定 mysql 開始同步的 binlog 位置資訊 canal.instance.master.address=192.168.0.25:63306 canal.instance.master.journal.name=mysql-bin.001349 canal.instance.master.position=198213313 # 3. username/password, 設定同步 mysql 的資料庫使用者名稱和密碼 canal.instance.dbUsername=xxxx canal.instance.dbPassword=xxx # 4. table regex, 正則匹配需要同步的資料表 canal.instance.filter.regex=xxxx # 5. mq config, 指定 mysql 上的路由繫結, 見 `1.2.3` canal.mq.topic=example2-routingkey ``` 儲存後即可在 操作 中啟動該例項 ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091138728-288682447.png) > 後話 > 如果此處的 instance 無法啟動, 按一下幾個步驟檢查操作一下試試: > > 1. 檢查叢集裡的`主配置`裡的`canal.destinations`是否包含新建的例項`instance`名稱; > 2. 檢查`canal-server`節點是否載入的`canal_local.properties`配置檔案; > 3. 刪除例項資料夾下的 `.db`, `.bat` 檔案, 更新例項配置檔案中的 `canal.instance.master.position` 的 `binglog` 位置後, 啟動 `instance`; ## 1.5. canal 配置說明 ### 1.5.1. canal.properties 1. canal.ip, 該節點 IP 2. canal.register.ip, 註冊到 zookeeper 上的 IP 3. canal.zkServers, zk 叢集 4. 是否啟用 tsdb, 開啟 table meta 的時間序列版本記錄功能 // 5. canal.serverMode, 設定為 rabbitmq, 預設為 tcp ```conf canal.instance.tsdb.enable = true canal.instance.tsdb.dir = ${canal.file.data.dir:../conf}/${canal.instance.destination:} canal.instance.tsdb.url = jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL; canal.instance.tsdb.dbUsername = canal canal.instance.tsdb.dbPassword = canal ``` 5. canal.destinations, 當前叢集上部署的 instance 列表 6. canal.mq.servers, 設定 Rabbitmq 叢集地址, !! 此處不可以加上埠 ### 1.5.2. instance.properties 1. canal.instance.master.address, master 資料庫地址 2. canal.instance.master.journal.name, 在資料庫中執行`show master status`的`File`值 3. canal.instance.master.position, 在資料庫中執行`show master status`的`Position`值 4. canal.instance.tsdb.enable=false, 禁用 tsdb 5. canal.instance.dbUsername, 例項資料庫使用者名稱 6. canal.instance.dbPassword, 例項資料庫密碼 7. canal.instance.filter.regex, 匹配需要同步的表 8. canal.mq.topic, canal 註冊 mq 的 topic 名稱 ### 1.5.3. properties 配置檔案 `properties` 配置分為兩部分 > canal.properties (系統根配置檔案) > instance.properties (instance 級別的配置檔案, 每個例項一份) 1. canal.properties ```conf canal.destinations # 當前 server 上部署的 instance 列表 canal.conf.dir # conf 目錄所在路徑 canal.auto.scan # 開啟 instance 自動掃描 # 如果配置為 true, canal.conf.dir 目錄下的 instance 配置變化會自動觸發 # 1. instance 目錄新增: 觸發 instance 配置載入, lazy 為 true 時則自動啟動; # 2. instance 目錄刪除: 解除安裝對應 instance 配置, 如已啟動則進行關閉; # 3. instance.properties 檔案變化: reload instance 配置, 如已啟動則自動進行重啟操作; canal.auto.scan.interval # instance 自動掃描間隔時間, 單位 s canal.instance.global.mode # 全域性配置載入方式 canal.instance.global.lazy # 全域性 lazy 模式 canal.instance.global.manager.address # 全域性的 manager 配置方式的連結資訊 canal.instance.global.spring.xml # 全域性的 spring 配置方式的元件檔案 canal.instance.example.mode canal.instance.example.lazy canal.instance.example.spring.xml # instance 級別的配置定義, 如有配置, 會自動覆蓋全域性配置定義模式 canal.instance.tsdb.enable # 是否開啟 table meta 的時間序列版本記錄功能 canal.instance.tsdb.dir # 時間序列版本的本地儲存路徑, 預設為 instance 目錄 canal.instance.tsdb.url # 時間序列版本的資料庫連線地址, 預設為本地嵌入式資料庫 canal.instance.tsdb.dbUsername # 時間序列版本的資料庫連線賬號 canal.instance.tsdb.dbPassword # 時間序列版本的資料庫連線密碼 ``` 2. instance.properties ```conf canal.id # 每個 canal server 例項的唯一標識 canal.ip # canal server 繫結的本地 IP 資訊, 如果不配置, 預設選擇一個本機 IP 進行啟動服務 canal.port # canal server 提供 socket 服務的埠 canal.zkServers # canal server 連線 zookeeper 叢集的連線地址, 例如: 10.20.144.22:2181,10.20.144.23:2181 canal.zookeeper.flush.period # canal 持久化資料到 zookeeper 上的更新頻率, 單位 ms canal.instance.memory.batch.mode # canal 記憶體 store 中資料快取模式 # 1. ITEMSIZE: 根據 buffer.size 進行限制, 只限制記錄的數量 # 2. MEMSIZE: 根據 buffer.size * buffer.memunit 的大小, 限制快取記錄的大小; canal.instance.memory.buffer.size # canal 記憶體 store 中可快取 buffer 記錄數, 需要為 2 的指數 canal.instance.memory.buffer.memunit # 記憶體記錄的單位大小, 預設為 1KB, 和 buffer.size 組合決定最終的記憶體使用大小 canal.instance.transactions.size # 最大事務完整解析的長度支援, 超過該長度後, 一個事務可能會被拆分成多次提交到 canal store 中, 無法保證事務的完整可見性 canal.instance.fallbackIntervalInSeconds # canal 發生 mysql 切換時, 在新的 mysql 庫上查詢 binlog 時需要往前查詢的時間, 單位 s # 說明: mysql 主備庫可能存在解析延遲或者時鐘不一致, 需要回退一段時間, 保證資料不丟 canal.instance.detecting.enable # 是否開啟心跳檢查 canal.instance.detecting.sql # 心跳檢查 sql, insert into retl.xdual values(1,now()) on duplicate key update x=now() canal.instance.detecting.interval.time # 心跳檢查頻率, 單位 s canal.instance.detecting.retry.threshold # 心跳檢查失敗重試次數 canal.instance.detecting.heatbeatHaEnable # 心跳檢查失敗後, 是否開啟 mysql 自動切換 # 說明: 比如心跳檢查失敗超過閾值後, 如果該配置為 true, canal 會自動連到 mysql 備庫獲取 binlog 資料 canal.instance.network.receiveBufferSize # 網路連線引數, SocketOptions.SO_RCVBUF canal.instance.network.sendBufferSize # 網路連線引數, SocketOptions.SO_SNDBUF canal.instance.network.soTimeout # 網路連線引數, SocketOptions.SO_TIMEOUT ``` ### 1.5.4. canal.mq.dynamicTopic ![](https://img2020.cnblogs.com/blog/335284/202103/335284-20210308091138976-1761814551.png) > 參考:
## 1.6. 問題處理 1. windows 下執行 `startup.bat` 啟動 canal 時, 出現如下異常 ``` Failed to instantiate [ch.qos.logback.classic.LoggerContext] Reported exception: ch.qos.logback.core.LogbackException: Unexpected filename extension of file [file:/D:/env/green/canal/conf/]. Should be either .groovy or .xml at ch.qos.logback.classic.util.ContextInitializer.configureByResource(ContextInitializer.java:79) at ch.qos.logback.classic.util.ContextInitializer.autoConfig(ContextInitializer.java:152) at org.slf4j.impl.StaticLoggerBinder.init(StaticLoggerBinder.java:85) at org.slf4j.impl.StaticLoggerBinder.(StaticLoggerBinder.java:55) at org.slf4j.LoggerFactory.bind(LoggerFactory.java:141) at org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:120) at org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:331) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:283) at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:304) at com.alibaba.otter.canal.deployer.CanalLauncher.(CanalLauncher.java:29) ``` **解決方法**: 將 `startup.bat` 裡的一下這行程式碼註釋開啟 `@rem set logback_configurationFile=%conf_dir%\logback.xml` 注, 新版 `1.1.5` 不存在該問題, `1.1.5`這個檔案中的這一行是沒有註釋掉的. 2. `1.1.5`新版本 `canal-admin` 啟動時出現如下異常: ``` 2020-04-10 18:55:40.406 [main] ERROR com.zaxxer.hikari.pool.HikariPool - HikariPool-1 - Exception during pool initialization. java.sql.SQLException: The server time zone value '�й���׼ʱ��' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support. ``` **解決方法** `spring.datasource.url` 配置的 mysql 連線地址後面加上引數 `&serverTimezone=UTC` 3. `Instance` 日誌裡出現異常 `errno = 1236, sqlstate = HY000 errmsg = log event entry exceeded max_allowed_packet;` ``` 2020-04-13 13:06:09.507 [destination = example3 , address = /192.168.2.108:3306 , EventParser] ERROR com.alibaba.otter.canal.common.alarm.LogAlarmHandler - destination:example3[java.io.IOException: Received error packet: errno = 1236, sqlstate = HY000 errmsg = log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master; the first event 'mysql-5.7' at 671745, the last event read from 'D:\env\mysql-5.7' at 673181, the last byte read from 'D:\env\mysql-5.7' at 673200. at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.DirectLogFetcher.fetch(DirectLogFetcher.java:102) at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.dump(MysqlConnection.java:235) at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:265) at java.lang.Thread.run(Unknown Source) ] ``` **解決方法** 刪除 `canal/conf` 下對應例項裡的 `meta.dat` 檔案, 讓 `canal-admin` 自動再生成即可; ## 1.7. 參考資料 - [canal(基於 mysql 資料庫 binlog 的增量訂閱和消費)](https://www.jianshu.com/p/6299048fad66) - [Canal Admin 搭建 Canal 叢集以及體驗](https://www.itgrocery.cn/posts/99c08147/) - [canal 整合RabbitMQ](https://www.jianshu.com/p/60a9176a8825) - [canal系列—配置檔案介紹](https://blog.csdn.net/u012758088/article/details/7