如何通過實時更新獲取數據庫新增數據
問題:
用戶需要及時獲取 mysql 表中的新增數據,以便通過短信發送給指定號碼。傳統的方法是通過服務器計劃任務每 30 秒讀取數據庫,但這會增加服務器負擔并延遲獲取數據。
解決方案:
使用 MySQL Binary Log (Binlog) 和 Canal
-
打開 MySQL 的 Binlog:
- 在 my.cnf 文件中,找到 binlog-do-db 和 binlog-ignore-db 選項,并將其設置為指定要記錄的數據庫。
- 確保 Binlog 已打開,并通過 SHOW MASTER LOGS 命令驗證。
-
安裝 Canal:
- Canal 是一個開源組件,用于訂閱 MySQL 的 Binlog。
- 在服務器上安裝 Canal,并按照其文檔進行配置。
-
配置 Canal 訂閱 Binlog:
-
打開 Canal 的配置文件 canal.properties,并配置以下內容:
- canal.destinations=example
- canal.app.destination.example.dw.dbAddress=localhost (數據庫地址)
- canal.app.destination.example.dw.dbPort=3306 (數據庫端口)
- canal.app.destination.example.dw.dbUsername=root (數據庫用戶名)
- canal.app.destination.example.dw.dbPassword=password (數據庫密碼)
- canal.app.destination.example.dw.database=mysql (要訂閱的數據庫名稱)
- canal.app.destination.example.dw.table=tbl_name (要訂閱的表名稱)
-
-
啟動 Canal 服務:
- 運行 sh bin/startup.sh 命令啟動 Canal。
-
實現 php 監聽器:
通過上述方法,可以實現實時獲取數據庫新增數據的需求,無需使用計劃任務,并且可以減少服務器負擔。