使用 mysql-binlog-connector 監聽處理 MySQLBinlog 文件

1. 需求概述

業務開發中經常需要根據一些數據變更實現相對應的操作。例如,一些用戶注銷自己的賬戶,系統可以給用戶自動發短信確認,這時有兩種解決方案,一種是耦合到業務系統中,當用戶執行注銷操作的時候,執行發短信的操作,既是是通過MQ也是要耦合業務代碼的,第二種方案基于數據庫層面的操作,通過監聽binlog實現自動發短信操作,這樣就可以與業務系統解耦。
本示例主要基于mysql-binlog-connector實現對數據庫的監聽,并集成springboot的方案。

2. 技術選型

基于binlog實現數據同步的方案有兩種:
一種是mysql-binlog-connector,另一種是ali的canal。
mysql-binlog-connector:是通過引入依賴jar包實現,需要自行實現解析,但是相對輕量。
canal:是數據同步中間件,需要單獨部署維護,功能強大,支持數據庫及MQ的同步,維護成本高。
根據實際業務場景,按需索取,業務量小,業務簡單,輕量可以通過mysql-binlog-connector,業務量大,邏輯復雜,有專門的運維團隊,可以考慮canal,比較經過阿里高并發驗證,相對穩定。

3. 方案設計

1.支持對不同數據庫,不同表的配置監聽。
2.封裝細節數據庫,對外提供統一監聽。
3.講結果集封裝位方便操作數據結構。
5.講監聽信息統一放入阻塞隊列。
6.實現多線程消費。

4. 配置驗證

1、正常開啟狀態

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.02 sec)
mysql> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       154 |
+------------------+-----------+
1 row in set (0.09 sec)

2、權限不足情況

mysql> show binary logs;
1227 - Access denied; you need (at least one of) the SUPER, REPLICATION CLIENT privilege(s) for this operation

3、未開啟狀態(默認情況下是不開啟的)

mysql> show binary logs;
ERROR 1381 - You are not using binary logging

5. 代碼示例

詳見工程代碼:https://github.com/xzxiaoshan/mysql-binlog-demo

5.1. 事件中斷問題

當binlog服務上線之后,服務默認會在log文件的最新position處進行監聽。格式如下:

Connected to 192.168.10.220:3306 at test-bin.000557/270069874 (sid:65535, cid:1089065)

其中 test-bin.000557 是磁盤上的 binlog 文件名稱,270069874 是對應該 binlog 文件中的 position 位置。

但由于binlog服務下線,重新啟動后,默認又開始在最新position處進行監聽,會丟失一不分binlog的事件,所以每次事件均需要記錄當前的position位置。
當重新啟動服務時,使用記錄的position位置初始化BinaryLogClient。

注:單實例可以使用記錄到本地文件的方式存儲,如果需要考慮多實例分布式問題則需要考慮存儲到redis等共享存儲中。因為事件屬于高頻操作,所以建議使用redis或者MQ這種寫入速度較快的存儲方式。

5.2 文件輪換問題

當有人發出一個FLUSH LOGS語句或者當前二進制日志文件變大超過max_binlog_size時,binlog的文件名會重新一個新的文件,所以我們也要監聽ROTATE事件并進行binlogFileName的記錄。

記錄binlogFileName和Position的代碼詳見文件 SaveBinlogFilenameAndPositionListener.java


(END)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/13555.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/13555.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/13555.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【軟件工程】【23.10】p2

關鍵字: 軟件復用技術、過程途徑、特定需求是文檔核心、數據字典條目、高內聚低耦合獨立性、數據流圖映射模塊結構圖、UML依賴、用例圖關系、RUB迭代、程序規格說明等價類劃分、有效性測試的目標、噴泉模型面向對象、軟件驗證過程、CMMI

算法提高之程序自動分析

算法提高之程序自動分析 核心思想&#xff1a;并查集 離散化 因為不是每個數都會用到 所以離散化一下**(不需要保留順序)**對于每一個值為1的等式 優先處理之后處理值為0的等式時 若ab已經連在一起 即為矛盾 #include <iostream>#include <cstring>#include &l…

【Linux】Centos7安裝RabbitMQ

【Linux】Centos7安裝RabbitMQ 下載 從 rabbitmq 的 GitHub 倉庫下載 https://github.com/rabbitmq/rabbitmq-server/releases rabbitmq 是 erlang 語言編寫的&#xff0c;需要先安裝 erlang https://github.com/rabbitmq/erlang-rpm/releases 安裝 使用rz命令上傳 erlang 和 …

Polar 網站被黑

Polar 網站被黑 開題&#xff0c;挺好看的前端&#xff0c;可惜啥也沒有。 信息搜集一波&#xff0c;掃目錄出現幾個敏感目錄&#xff0c;但是沒什么用。 繼續搜集&#xff0c;在返回包中發現了HINT F5XDAXZQNZSV6ZRRNZSF63JTF4base32解碼后是一個路由/n0_0ne_f1nd_m3/&#x…

數據倉庫實驗四:聚類分析實驗

目錄 一、實驗目的二、實驗內容和要求三、實驗步驟1、建立數據表2、建立數據源視圖3、建立挖掘結構Student.dmm4、部署項目并瀏覽結果5、挖掘模型預測 四、實驗結果分析五、實驗總結體會 一、實驗目的 通過本實驗&#xff0c;進一步理解基于劃分的、基于層次的、基于密度的聚類…

Easy-poi 和 EasyExcel 選型

目錄 共同點地址如何選 共同點 easy-poi 和 easyexcel 都是基于 apache poi 進行二次開發的&#xff0c;底層都是依賴的 apache poi使用簡單&#xff0c;都可以通過簡單的注解實現excel文件的導入導出 地址 esay poi 是一個開源的 excel,word 處理框架。鏈接 easy excel 是…

Xed編輯器開發第二期:使用Rust從0到1寫一個文本編輯器

第三篇 這部分接著處理用戶退出命令以及一些其他新功能&#xff1b; 3.1 使用CtrlQ退出 modifiers: event::KeyModifiers::CONTROL,使用CONTROL替換之前的NONE值即可&#xff1b; 3.2 重構鍵盤輸入 讓我們重構我們的代碼&#xff0c;以便我們有一個用于低級按鍵讀取的函數&…

《Rust奇幻之旅:從Java和C++開啟》第1章Hello world 2/5

講動人的故事,寫懂人的代碼 很多程序員都在自學Rust。 ??但Rust的學習曲線是真的陡,讓人有點兒怵頭。 程序員工作壓力大,能用來自學新東西的時間簡直就是鳳毛麟角。 ??目前,在豆瓣上有7本Rust入門同類書。它們雖有高分評價,但仍存在不足。 首先,就是它們介紹的Rust新…

【前端面經】BFC

BFC BFC什么是 BFC&#xff1f;元素開啟 BDC 后的特殊布局效果元素開啟 BFC 的方式 BFC 什么是 BFC&#xff1f; 官方解釋&#xff1a;A block formatting context (BFC) is a part of a visual CSS rendering of a web page. It’s the region in which the layout of block…

什么是谷歌爬蟲?

其實就是谷歌用來瀏覽網絡信息的一個自動化程序&#xff0c;他們會在你的網站爬取&#xff0c;尋找和搜集信息&#xff0c;谷歌爬蟲可以說決定著一個網站在谷歌的生死 谷歌爬蟲的作用機制就在于發現新網站以及新網頁&#xff0c;然后他會把網頁的內容帶回去&#xff0c;更新到…

PikaUnsafe upfileupload

1.client check 客戶端檢測&#xff0c;前端js檢測&#xff0c;禁用js和修改后綴名即可。 php格式不能上傳&#xff0c;我們修改后綴上傳。 蟻劍成功連接。 2.MIME type 這個就是 content-type 規定上傳類型&#xff0c;上面的方法也能成功&#xff0c;也可以修改 conten-ty…

面試框架【面試準備】

前言 2023-9-12 12:12:04 2023-09-14 16:13:04 公開發布于 2024-5-22 00:16:21 以下內容源自《【面試準備】》 僅供學習交流使用 版權 禁止其他平臺發布時刪除以下此話 本文首次發布于CSDN平臺 作者是CSDN日星月云 博客主頁是https://blog.csdn.net/qq_51625007 禁止其他平…

奇偶數遞增遞減-第13屆藍橋杯選拔賽Python真題精選

[導讀]&#xff1a;超平老師的Scratch藍橋杯真題解讀系列在推出之后&#xff0c;受到了廣大老師和家長的好評&#xff0c;非常感謝各位的認可和厚愛。作為回饋&#xff0c;超平老師計劃推出《Python藍橋杯真題解析100講》&#xff0c;這是解讀系列的第70講。 奇偶數遞增遞減&a…

vite+ts+mock+vue-router+pinia實現vue的路由權限

0.權限管理 前端的權限管理主要分為如下&#xff1a; 接口權限路由權限菜單權限按鈕權限 權限是對特定資源的訪問許可&#xff0c;所謂權限控制&#xff0c;也就是確保用戶只能訪問到被分配的資源 1.項目搭建 創建vite項目 yarn create vite配置別名 npm install path -…

4. C++入門:內聯函數、auto關鍵字、范圍for及nullptr

內聯函數 概念 以inline修飾的函數叫做內聯函數&#xff0c;編譯時C編譯器會在調用內聯函數的地方展開&#xff0c;沒有函數調用建立棧幀的開銷&#xff0c;內聯函數提升程序運行的效率 對比C的宏 C語言不足&#xff1a;宏 #define ADD(x, y) ((x)(y))int main() {int ret…

python實現520表白圖案

今天是520哦&#xff0c;作為程序員有必要通過自己的專業知識來向你的愛人表達下你的愛意。那么python中怎么實現繪制520表白圖案呢&#xff1f;這里給出方法&#xff1a; 1、使用圖形庫&#xff08;如turtle&#xff09; 使用turtle模塊&#xff0c;你可以繪制各種形狀和圖案…

Docker 安裝kingbase V8r6

下載 官網下載&#xff0c;注意&#xff1a;這里下載 Docker 版本v8r6 安裝 # 導入鏡像 docker load -i kingbase.tar# 重命名 docker tag [image-name]:[tag] [new-image-name]:[new-tag]# 刪除 docker rmi [image-name]:[tag]# 創建容器 docker run -tid \ --privileged \…

python實現繪制煙花代碼

在Python中&#xff0c;我們可以使用多個庫來繪制煙花效果&#xff0c;例如turtle庫用于簡單的繪圖&#xff0c;或者更復雜的庫如pygame或matplotlib結合動畫。但是&#xff0c;由于turtle庫是Python自帶的&#xff0c;我們可以使用它來繪制一個簡單的煙花效果。 下面是一個使…

Stable Diffusion AMD加速方法-ZLUDA重出江湖

目前幾大開源的Stable Diffusion平臺&#xff0c;更新速度都慢了&#xff0c;一個是沒有太多新技術出現&#xff0c;新出的基礎模型也都不完整開源了&#xff08;API調用&#xff09;&#xff0c;能整的功能&#xff0c;也都整得差不多了。然后一群AMD死忠還在等著有一個能有一…

【前端】使用 Canvas 實現貪吃蛇小游戲

使用 Canvas 實現貪吃蛇小游戲 在這篇博客中&#xff0c;我們將介紹如何使用 HTML5 Canvas 和 JavaScript 實現一個簡單的貪吃蛇&#xff08;Snake&#xff09;小游戲。這個項目是一個基礎的游戲開發練習&#xff0c;它可以幫助你理解如何在 Canvas 上繪圖、如何處理用戶輸入以…