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

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

- 執(zhí)行 Binlog 解析
- 進(jìn)入 Binlog 存儲目錄(路徑與
my.cnf中log-bin配置一致),執(zhí)行解析命令:
# 進(jìn)入Binlog目錄 cd /data/mysql/binlog/ # 解析命令:--start-position=起始位點(diǎn) --stop-position=結(jié)束位點(diǎn)(可選) mysqlbinlog --start-position=212 --stop-position=763 mysql-bin.000006 -vv > /data/binlog_parse_01.sql
- 參數(shù)說明:
-vv輸出詳細(xì)行數(shù)據(jù)(含字段值),>重定向到指定文件便于查看。
- 查看解析結(jié)果
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
注意:
- 時間格式需嚴(yán)格匹配,建議精確到分鐘(秒級可選)。
- 若 Binlog 文件較多,可先用
mysqlbinlog --base64-output=decode-rows -v 文件名 | grep "時間關(guān)鍵詞"快速定位目標(biāo)文件。
三、基于 GTID 解析(精準(zhǔn)定位單個事務(wù))
適用場景:MySQL 8.0+ 版本,已開啟 GTID(全局事務(wù) ID),需精準(zhǔn)定位單個事務(wù)(如主從復(fù)制中跳過錯誤事務(wù))
實(shí)操步驟:
- 確認(rèn) GTID 狀態(tài)
- 先確保 GTID 已開啟,查看當(dāng)前已執(zhí)行的 GTID:
show master status\G
輸出中 Executed_Gtid_Set 字段即為已執(zhí)行的 GTID(格式:UUID:事務(wù)序號,如 dac2d0d1-d4cc-11f0-8896-000c295cba4b:1-94954)。

- 解析指定 GTID 的事務(wù)
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í)例,僅需查看某一數(shù)據(jù)庫的變更(如隔離業(yè)務(wù)庫數(shù)據(jù)操作)
實(shí)操步驟:
- 生成多庫測試數(shù)據(jù)(可選)
# 查看當(dāng)前位點(diǎn) 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); -- 記錄位點(diǎn)范圍(起始:948,結(jié)束:1339) show master status\G

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

五、解析加密的 Binlog
適用場景:MySQL 開啟 Binlog 加密存儲(增強(qiáng)數(shù)據(jù)安全性),需通過服務(wù)認(rèn)證解析(本地文件無法直接讀?。?/h3>
步驟 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服務(wù) /etc/init.d/mysql.server restart # 4. 驗(yàn)證加密是否生效 show binary logs;

步驟 2:解析加密 Binlog
# 核心命令:--read-from-remote-server 從服務(wù)端讀?。ū镜匚募用軣o法直接解析) 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:關(guān)閉 Binlog 加密(可選)
# 1. 編輯配置文件,刪除加密相關(guān)配置 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服務(wù) /etc/init.d/mysql.server restart # 4. 驗(yàn)證關(guān)閉 show binary logs;

總結(jié)
| 解析方式 | 核心參數(shù) | 適用場景 |
|---|---|---|
| 基于位點(diǎn) | –start-position/–stop-position | 已知變更位點(diǎn) |
| 基于時間 | –start-datetime/–stop-datetime | 已知變更時間 |
| 基于 GTID | –include-gtids | MySQL 8.0+ 精準(zhǔn)定位事務(wù) |
| 指定數(shù)據(jù)庫 | -d 數(shù)據(jù)庫名 | 多庫隔離,僅需某庫變更 |
| 加密 Binlog | –read-from-remote-server | 開啟 Binlog 加密的場景 |
注意事項(xiàng):
- 解析時需確保
mysqlbinlog工具版本與 MySQL 服務(wù)器版本一致(避免兼容性問題)。 - 敏感環(huán)境中,解析結(jié)果文件需做好權(quán)限控制(如
chmod 600),防止數(shù)據(jù)泄露。 - 若需恢復(fù)數(shù)據(jù),可直接執(zhí)行解析后的 SQL 文件(
mysql -uroot -p xxx.sql)。
如果遇到解析失敗、位點(diǎn)定位不準(zhǔn)等問題,歡迎在評論區(qū)交流~ 后續(xù)將更新 Binlog 日志清理、主從復(fù)制實(shí)戰(zhàn)等內(nèi)容,記得關(guān)注!
到此這篇關(guān)于MySql Binlog的5種場景+實(shí)操步驟全解析的文章就介紹到這了,更多相關(guān)mysql binlog解析內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
MySQL 數(shù)據(jù)庫定時備份的幾種方式(全面)
在操作數(shù)據(jù)過程中,可能會導(dǎo)致數(shù)據(jù)錯誤,甚至數(shù)據(jù)庫奔潰,而有效的定時備份能很好地保護(hù)數(shù)據(jù)庫。本篇文章主要講述了幾種方法進(jìn)行 MySQL 定時備份數(shù)據(jù)庫。2021-09-09
MYSQL數(shù)據(jù)庫數(shù)據(jù)拆分之分庫分表總結(jié)
這篇文章主要介紹了MYSQL數(shù)據(jù)庫數(shù)據(jù)拆分之分庫分表總結(jié),需要的朋友可以參考下2016-07-07
將MySQL的表數(shù)據(jù)全量導(dǎo)入clichhouse庫中
這篇文章主要介紹了將MySQL的表數(shù)據(jù)全量導(dǎo)入clichhouse庫中,詳細(xì)介紹全量導(dǎo)出MySQL數(shù)據(jù)到clickhouse表的相關(guān)內(nèi)容,需要的小伙伴可以參考一下2022-03-03
MySQL批量導(dǎo)入Excel數(shù)據(jù)(超詳細(xì))
這篇文章主要介紹了MySQL批量導(dǎo)入Excel數(shù)據(jù)(超詳細(xì)),文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下,希望對你的學(xué)習(xí)有所幫助2022-08-08
MySql事務(wù)及ACID實(shí)現(xiàn)原理詳解
這篇文章主要為大家介紹了MySql事務(wù)及ACID實(shí)現(xiàn)原理詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-09-09
MySQL數(shù)據(jù)庫存入Date時天數(shù)會少一天的問題及解決
這篇文章主要介紹了MySQL數(shù)據(jù)庫存入Date時天數(shù)會少一天的問題及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-11-11
SQL實(shí)現(xiàn)數(shù)據(jù)過濾流程詳解
這篇文章主要介紹了SQL實(shí)現(xiàn)數(shù)據(jù)過濾流程,當(dāng)我們在SQL中查詢數(shù)據(jù)時,肯定是有一些數(shù)據(jù)是我們不需要的,所以我們此時就要對數(shù)據(jù)進(jìn)行過濾,以篩選出我們僅需要的數(shù)據(jù)2023-01-01

