SpringBoot利用cancl監聽mysql的binlog日誌通過kafja實時同步數據到es

canal官網:https://github.com/alibaba/canal/wiki

gitlab:https://github.com/alibaba/canal/wiki/QuickStart

下載地址:https://github.com/alibaba/canal/releases

Canal

阿里巴巴開源的 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;

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章