Canal


一、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進程

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM