一、canal介紹
1、canal主要用途是基於mysql數據庫增量日志解析,提供增量數據訂閱和消費。
早期阿里巴巴是因為杭州和美國雙機房部署,存在跨機房同步的業務需求。
當前canal支持源端mysql版本包括5.1.x、5.5.x、5.6.x、5.7.x、8.0.x
2、canal沒有獨立的官網,可以在github上下載和查看canal文檔,地址:https://github.com/alibaba/canal/wiki
3、canal工作原理:canal監聽binlog日志
二、安裝canal
1、開啟binlog
①登錄數據庫:mysql -u root -p xxxxxx
②查看log_bin是否為ON:show variables like "log%";
③修改my.cnf文件:vim /etc/my.cnf
隨機指定一個不能和其他集群中機器重名的字符串,不要和canal的slaveId重復:server-id=123
配置binlog日志目錄,配置后會自動開啟binlog日志,並寫入該目錄:log-bin=/var/lib/mysql/mysql-bin
選擇row模式:binlog-format=ROW
mysql有三種模式:ROW:記錄操作mysql的每一行
STATEMENT:記錄sql語句,但是sql中涉及函數操作時,如now,uuid時會產生差異,導致數據不准確
MIXED:當sql中有函數時用ROW記錄,當沒有函數時用STATEMENT記錄
④重啟mysql:service mysqld restart
⑤再次查看binlog是否開啟:show variables like "log%";
2、下載canal:https://github.com/alibaba/canal/releases canal.deployer-1.1.4.tar.gz
3、上傳至node節點,創建一個新目錄,用於放canal解壓后文件:mkdir canal
解壓至創建的文件夾中:tar -zxvf ./canal.deployer-1.1.4.tar.gz -C canal
三、canal同步mysql數據原理
1、先從Log Position中獲取到上次解析成功的位置
2、向數據庫發送命令同步binlog日志
3、mysql推送binlog,如果沒有連接成功的話連接失敗
4、解析日志並往后傳遞
四、數據配置
canal中需要配置兩個文件和權限
1、配置mysql slave權限:canal的原理是模擬自己為mysql slave,所以這里需要canal作為mysql slave的相關權限
1 mysql> CREATE USER canal IDENTIFIED BY 'canal'; 2 mysql> GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%'; 3 mysql> FLUSH PRIVILEGES; 4 mysql> show grants for 'canal';
2、配置兩個文件
第一個文件為canal的數據源,即數據從哪個mysql中節點來:instance.properties
將canal.instance.mysql.slaveId解開注釋並設置為123456,及與之前my.cnf設置不一樣即可
將canal.instance.master.address=127.0.0.1:3306改為數據庫地址
將canal.instance.dbUsername=canal改為用戶名,及前面復制權限的用戶名
將canal.instance.dbPassword=canal改為密碼,及前面復制權限的密碼
將canal.mq.topic=canal_topic(如果你設置為將數據寫到kafka中時配置這個)
第二個文件為canal的目標源,即這些數據要通過canal寫到哪里去:/conf/canal.properties
可以查閱:https://github.com/alibaba/canal/wiki/AdminGuide
五、啟動canal
1、cd /canal/bin/
2、./startup.sh
3、jps查看是否存在CanalLauncher進程