canal官網:https://github.com/alibaba/canal/wiki
gitlab:https://github.com/alibaba/canal/wiki/QuickStart
下載地址:https://github.com/alibaba/canal/releases
阿里巴巴開源的 Canal 會將自己僞裝成 MySQL 從節點(Slave),並從主節點(Master)獲取 Binlog,解析和貯存後供下游消費端使用。Canal 包含兩個組成部分:服務端和客戶端。服務端負責連接至不同的 MySQL 實例,併爲每個實例維護一個事件消息隊列;客戶端則可以訂閱這些隊列中的數據變更事件,處理並存儲到數據倉庫中。
組成:
Canal 會將自己僞裝成 MySQL 從節點(Slave),並從主節點(Master)獲取 Binlog,解析和貯存後供下游消費端使用。Canal 包含兩個組成部分:服務端和客戶端。服務端負責連接至不同的 MySQL 實例,併爲每個實例維護一個事件消息隊列;客戶端則可以訂閱這些隊列中的數據變更事件,處理並存儲到數據倉庫中。下面我們來看如何快速搭建起一個 Canal 服務。
1.mysql配置
- 開啓mysql的binlog模塊
切換到mysql的安裝路徑,找到my.cnf(Linux)/my.ini (windows),加入如下內容:()
[mysqld]
log-bin=mysql-bin #添加這一行就ok
binlog-format=ROW #選擇row模式
server_id=1 #配置mysql replaction需要定義,不能和canal的slaveId重複
- 配置mysql數據庫
Canal 會將自己僞裝成 MySQL 從節點(Slave),並從主節點(Master)獲取 Binlog,解析和貯存後供下游消費端使用。Canal 包含兩個組成部分:服務端和客戶端。服務端負責連接至不同的 MySQL 實例,併爲每個實例維護一個事件消息隊列;客戶端則可以訂閱這些隊列中的數據變更事件,處理並存儲到數據倉庫中。創建canal用戶,用來管理canal的訪問權限。我們可以通過對canal用戶訪問權限的控制,進而控制canal能夠獲取的內容。
CREATE USER canal IDENTIFIED BY 'canal';
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON 數據庫名.表名 TO 'canal'@'%';
-- GRANT ALL PRIVILEGES ON 數據庫名.表名 TO 'canal'@'%' ;
-- 刷新權限,上命令執行不了也刷新下
FLUSH PRIVILEGES;
Mysql是否開啓binlog日誌&開啓方法
運行sql show variables like 'log_bin';
如果Value 爲 OFF 則爲開啓日誌文件
如何開啓mysql日誌?
找到my,cnf 中 [mysqld] 添加如下
[mysqld]
# binlog 配置
log-bin = /usr/local/var/mysql/logs/mysql-bin.log
expire-logs-days = 14
max-binlog-size = 500M
server-id = 1
如果沒有my.cnf 或者是集成的環境 找到my.ini 中 [mysqld] 添加如下
[mysqld]
# binlog 配置
log-bin = /usr/local/var/mysql/logs/mysql-bin.log
expire-logs-days = 14
max-binlog-size = 500M
server-id = 1
重啓mysql後 show variables like 'log_bin'; Value 爲 ON即可
查詢binlog 變動信息 show binlog events;