MySql Binlog的5種場景+實操步驟全解析
Binlog(二進制日志)是 MySQL 核心日志之一,記錄數(shù)據(jù)庫所有數(shù)據(jù)變更操作(增刪改、表結構調(diào)整等),是數(shù)據(jù)恢復、主從復制、問題排查的關鍵工具。本文將詳細拆解 基于位點、時間、GTID、指定數(shù)據(jù)庫、加密 Binlog 的 5 種解析方法,附完整命令與場景說明,新手也能直接上手。
一、基于位點解析(精準定位變更位置)
適用場景:已知數(shù)據(jù)變更發(fā)生的 Binlog 文件及大致位點(如主從同步中斷時定位錯誤位點)
實操步驟:
- 查看當前 Binlog 狀態(tài)
- 先確認當前正在寫入的 Binlog 文件、當前位點及 GTID:
show master status\G
輸出結果中:
File:當前 Binlog 文件名(如mysql-bin.00006)
Position:當前位點(如212,初始位點通常為 155)

生成測試 Binlog(可選)
若需驗證解析效果,可執(zhí)行測試操作生成變更記錄:
-- 創(chuàng)建測試表并插入數(shù)據(jù) create table martin.binlog_test(id int); insert into martin.binlog_test select 1;
再次執(zhí)行 show master status\G,記錄變更后的位點(如 763)。

- 執(zhí)行 Binlog 解析
- 進入 Binlog 存儲目錄(路徑與
my.cnf中log-bin配置一致),執(zhí)行解析命令:
# 進入Binlog目錄 cd /data/mysql/binlog/ # 解析命令:--start-position=起始位點 --stop-position=結束位點(可選) mysqlbinlog --start-position=212 --stop-position=763 mysql-bin.000006 -vv > /data/binlog_parse_01.sql
- 參數(shù)說明:
-vv輸出詳細行數(shù)據(jù)(含字段值),>重定向到指定文件便于查看。
- 查看解析結果
cat /data/binlog_parse_01.sql


二、基于時間解析(按時間范圍篩選)
適用場景:已知數(shù)據(jù)變更的大致時間(如排查某時間段的數(shù)據(jù)異常)
核心命令:
# 解析指定時間后的數(shù)據(jù)(格式:YYYY-MM-DD HH:MM:SS) mysqlbinlog --start-datetime="2026-02-03 15:29:55" mysql-bin.000006 > /data/binlog_parse_02.sql # 解析時間區(qū)間內(nèi)的數(shù)據(jù)(添加--stop-datetime) mysqlbinlog --start-datetime="2026-02-03 15:29:55" --stop-datetime="2026-02-03 15:33:48" mysql-bin.000006 > /data/binlog_parse_02_1.sql
注意:
- 時間格式需嚴格匹配,建議精確到分鐘(秒級可選)。
- 若 Binlog 文件較多,可先用
mysqlbinlog --base64-output=decode-rows -v 文件名 | grep "時間關鍵詞"快速定位目標文件。
三、基于 GTID 解析(精準定位單個事務)
適用場景:MySQL 8.0+ 版本,已開啟 GTID(全局事務 ID),需精準定位單個事務(如主從復制中跳過錯誤事務)
實操步驟:
- 確認 GTID 狀態(tài)
- 先確保 GTID 已開啟,查看當前已執(zhí)行的 GTID:
show master status\G
輸出中 Executed_Gtid_Set 字段即為已執(zhí)行的 GTID(格式:UUID:事務序號,如 dac2d0d1-d4cc-11f0-8896-000c295cba4b:1-94954)。

- 解析指定 GTID 的事務
mysqlbinlog --include-gtids 'dac2d0d1-d4cc-11f0-8896-000c295cba4b:1-94954' mysql-bin.000007 -vv > /data/binlog_parse_03.sql
- 參數(shù)說明:
--include-gtids指定需解析的 GTID(多個用逗號分隔),支持范圍(如1-100)。
四、僅解析指定數(shù)據(jù)庫的 Binlog
適用場景:多庫共用一個 MySQL 實例,僅需查看某一數(shù)據(jù)庫的變更(如隔離業(yè)務庫數(shù)據(jù)操作)
實操步驟:
- 生成多庫測試數(shù)據(jù)(可選)
# 查看當前位點 show master status\G -- 切換到maria庫創(chuàng)建表 use maria; create table binlog_test_01(id int); -- 切換到test庫創(chuàng)建表 use test; create table aaa(id int); -- 記錄位點范圍(起始:948,結束:1339) show master status\G

- 解析指定數(shù)據(jù)庫
# -d 參數(shù)指定數(shù)據(jù)庫名,限定位點范圍 mysqlbinlog --start-position=2147 --stop-position=2540 -d maria mysql-bin.000012 -vv > /data/binlog_parse_04.sql
解析結果僅包含 martin 庫的變更,test 庫的操作會被過濾。

五、解析加密的 Binlog
適用場景:MySQL 開啟 Binlog 加密存儲(增強數(shù)據(jù)安全性),需通過服務認證解析(本地文件無法直接讀取)
步驟 1:開啟 Binlog 加密(前置配置)
# 1. 編輯MySQL配置文件 vim /data/mysql/conf/my.cnf # 2. 添加以下配置 early-plugin-load = keyring_file.so # 加載密鑰插件 keyring_file_data = /data/mysql/keyring # 密鑰存儲路徑 binlog_encryption = on # 開啟加密 # 3. 重啟MySQL服務 /etc/init.d/mysql.server restart # 4. 驗證加密是否生效 show binary logs;

步驟 2:解析加密 Binlog
# 核心命令:--read-from-remote-server 從服務端讀取(本地文件加密無法直接解析) mysqlbinlog --read-from-remote-server -uroot -p --start-position=212 --stop-position=548 mysql-bin.000007 -vv > /data/binlog_parse_05.sql
執(zhí)行后輸入 MySQL 密碼,即可生成解密后的解析文件。

步驟 3:關閉 Binlog 加密(可選)
# 1. 編輯配置文件,刪除加密相關配置 vim /data/mysql/conf/my.cnf # 刪除以下行: # early-plugin-load = keyring_file.so # keyring_file_data = /data/mysql/keyring # binlog_encryption = on # 2. 備份舊加密Binlog(避免重啟失?。? mkdir /data/mysql/backup mv /data/mysql/binlog/* /data/mysql/backup/ # 3. 重啟MySQL服務 /etc/init.d/mysql.server restart # 4. 驗證關閉 show binary logs;

總結
| 解析方式 | 核心參數(shù) | 適用場景 |
|---|---|---|
| 基于位點 | –start-position/–stop-position | 已知變更位點 |
| 基于時間 | –start-datetime/–stop-datetime | 已知變更時間 |
| 基于 GTID | –include-gtids | MySQL 8.0+ 精準定位事務 |
| 指定數(shù)據(jù)庫 | -d 數(shù)據(jù)庫名 | 多庫隔離,僅需某庫變更 |
| 加密 Binlog | –read-from-remote-server | 開啟 Binlog 加密的場景 |
注意事項:
- 解析時需確保
mysqlbinlog工具版本與 MySQL 服務器版本一致(避免兼容性問題)。 - 敏感環(huán)境中,解析結果文件需做好權限控制(如
chmod 600),防止數(shù)據(jù)泄露。 - 若需恢復數(shù)據(jù),可直接執(zhí)行解析后的 SQL 文件(
mysql -uroot -p xxx.sql)。
如果遇到解析失敗、位點定位不準等問題,歡迎在評論區(qū)交流~ 后續(xù)將更新 Binlog 日志清理、主從復制實戰(zhàn)等內(nèi)容,記得關注!
到此這篇關于MySql Binlog的5種場景+實操步驟全解析的文章就介紹到這了,更多相關mysql binlog解析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
mysql時間戳格式化函數(shù)from_unixtime使用的簡單說明
mysql中的FROM_UNIXTIME函數(shù)可以數(shù)據(jù)庫中整型類的時間戳格式化為字符串的日期時間格式,下面這篇文章主要給大家介紹了關于mysql時間戳格式化函數(shù)from_unixtime使用的簡單說明,需要的朋友可以參考下2022-08-08
MySQL函數(shù)sysdate()與now()的區(qū)別測試用例對比
這篇文章主要為大家介紹了MySQL函數(shù)sysdate()與now()的區(qū)別測試用例對比詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-12-12
MySQL安裝與創(chuàng)建用戶操作(新手入門指南)
這篇文章主要為大家介紹了MySQL安裝與創(chuàng)建用戶的使用講解是非常適合小白新手的入門學習,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2023-05-05
CenOS6.7下mysql 8.0.22 安裝配置方法圖文教程
這篇文章主要為大家詳細介紹了CenOS6.7下mysql 8.0.22 安裝配置方法圖文教程,文中安裝步驟介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-11-11

