MySQL中Binlog的完整格式解析(ROW 模式,默認(rèn))
MySQL 5.7 默認(rèn) binlog 格式是 ROW(行模式),這是生產(chǎn)環(huán)境最常用、最穩(wěn)定的格式。我給你一份可直接落地使用的解析指南,包含格式結(jié)構(gòu)、解析命令、字段含義、實(shí)戰(zhàn)案例。
一、MySQL 5.7 Binlog 核心特性
- 默認(rèn)格式:
ROW(行模式) - 記錄內(nèi)容:不存 SQL,只存行數(shù)據(jù)變更的前后鏡像
- 主從復(fù)制:絕對(duì)一致,無函數(shù) / 存儲(chǔ)過程偏差
- 支持:數(shù)據(jù)恢復(fù)、閃回、CDC 同步(Canal/Debezium)
- binlog 文件:二進(jìn)制文件,必須用
mysqlbinlog解析
二、3 種格式在 5.7 中的表現(xiàn)
表格
| 格式 | 說明 | 5.7 是否推薦 |
|---|---|---|
| ROW(默認(rèn)) | 記錄行變更 | ? 強(qiáng)烈推薦 |
| STATEMENT | 記錄原始 SQL | ? 不推薦(主從不一致) |
| MIXED | 自動(dòng)切換 | ?? 一般不使用 |
查看當(dāng)前格式:
show variables like 'binlog_format';
三、ROW 模式 Binlog 結(jié)構(gòu)(最重要)
一個(gè)完整的 binlog 事件包含:
- 事件頭:時(shí)間、位置、語句類型
- 表映射:庫(kù)名、表名、字段結(jié)構(gòu)
- 行數(shù)據(jù)
- 前鏡像(before):變更前的數(shù)據(jù)(UPDATE/DELETE)
- 后鏡像(after):變更后的數(shù)據(jù)(INSERT/UPDATE)
四、mysqlbinlog 解析命令(5.7 專用)
1. 基礎(chǔ)解析(能看懂行數(shù)據(jù))
mysqlbinlog -v --base64-output=DECODE-ROWS mysql-bin.000001
2. 詳細(xì)解析(最常用)
mysqlbinlog -vv --base64-output=DECODE-ROWS mysql-bin.000001
-v:簡(jiǎn)單解析行-vv:顯示字段名 + 類型 + 值(生產(chǎn)必備)
3. 按時(shí)間 / 位置解析
# 按位置 mysqlbinlog --start-position=107 --stop-position=1000 -vv mysql-bin.000001 # 按時(shí)間 mysqlbinlog --start-datetime="2026-03-28 10:00:00" --stop-datetime="2026-03-28 11:00:00" mysql-bin.000001
五、ROW 格式解析實(shí)戰(zhàn)(一看就懂)
示例 SQL
update user set age=26 where id=1;
解析后關(guān)鍵內(nèi)容(精簡(jiǎn)版
字段含義
@1:第 1 列@2:第 2 列WHERE:前鏡像(原數(shù)據(jù))SET:后鏡像(新數(shù)據(jù))
六、三種操作的 Binlog 表現(xiàn)
1. INSERT(只有后鏡像)
### INSERT INTO `test`.`user` ### SET ### @1=2 ### @2='李四' ### @3=20
2. UPDATE(前 + 后鏡像)
plaintext
### UPDATE ### WHERE(原數(shù)據(jù)) ### SET(新數(shù)據(jù))
3. DELETE(只有前鏡像)
### DELETE FROM `test`.`user` ### WHERE ### @1=1 ### @2='張三' ### @3=26
七、MySQL 5.7 Binlog 關(guān)鍵配置(my.cnf)
server-id = 1 log_bin = mysql-bin binlog_format = ROW # 5.7 默認(rèn) expire_logs_days = 7 # 自動(dòng)清理 binlog_row_image = full # 默認(rèn):記錄全部字段(推薦)
binlog_row_image=full:記錄所有列(恢復(fù)最安全)minimal:只記錄修改列(省空間,但恢復(fù)麻煩)
八、常見問題
1. 解析出來是亂碼?
必須加:
--base64-output=DECODE-ROWS -vv
2. 看不到字段名?
用 -vv 而不是 -v。
3. 批量更新日志很大?
ROW 模式會(huì)記錄每一行,正?,F(xiàn)象。
總結(jié)(最核心)
- MySQL 5.7 默認(rèn) binlog = ROW 行模式
- 記錄:行數(shù)據(jù)前后鏡像
- 解析命令:
mysqlbinlog -vv --base64-output=DECODE-ROWS - 結(jié)構(gòu):事件頭 → 表信息 → 前鏡像 (WHERE) → 后鏡像 (SET)
- 用途:主從復(fù)制、數(shù)據(jù)恢復(fù)、CDC 同步
以上就是MySQL中Binlog的完整格式解析(ROW 模式,默認(rèn))的詳細(xì)內(nèi)容,更多關(guān)于MySQL Binlog完整格式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MySQL9.1.0實(shí)現(xiàn)GTID模式的項(xiàng)目實(shí)踐
本文主要介紹了在MySQL 9.1.0中實(shí)現(xiàn)GTID模式的主從復(fù)制,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2025-02-02
解決MySQL中IN子查詢會(huì)導(dǎo)致無法使用索引問題
這篇文章主要介紹了MySQL中IN子查詢會(huì)導(dǎo)致無法使用索引問題,文章給大家介紹了兩種子查詢的寫法,需要的朋友可以參考下2017-06-06
MySQL中ON DUPLICATE KEY UPDATE語句的使用
INSERT INTO ... ON DUPLICATE KEY UPDATE?是一個(gè)強(qiáng)大的SQL語句,它結(jié)合了插入新記錄和更新已存在記錄的功能于一體,本文就來介紹一下MySQL中ON DUPLICATE KEY UPDATE語句的使用,感興趣的可以了解一下2024-08-08
MySQL為時(shí)間字段設(shè)置默認(rèn)當(dāng)前時(shí)間的方法技巧
文章詳細(xì)介紹了MySQL中記錄創(chuàng)建時(shí)間和最后修改時(shí)間的最佳實(shí)踐,包括時(shí)間類型的支持、默認(rèn)值函數(shù)的使用、MySQL版本的演進(jìn)、常見錯(cuò)誤的修復(fù)以及高級(jí)技巧,建議使用DATETIME或TIMESTAMP類型,并在DEFAULT子句中使用CURRENT_TIMESTAMP函數(shù),需要的朋友可以參考下2026-02-02
MySQL如何對(duì)數(shù)據(jù)進(jìn)行排序圖文詳解
我們知道從MySQL表中使用SQL SELECT語句來讀取數(shù)據(jù),下面這篇文章主要給大家介紹了關(guān)于MySQL如何對(duì)數(shù)據(jù)進(jìn)行排序的相關(guān)資料,文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2022-08-08
mysql觸發(fā)器之創(chuàng)建多個(gè)觸發(fā)器操作實(shí)例分析
這篇文章主要介紹了mysql觸發(fā)器之創(chuàng)建多個(gè)觸發(fā)器操作,結(jié)合實(shí)例形式分析了mysql創(chuàng)建及使用多個(gè)觸發(fā)器的相關(guān)操作技巧,需要的朋友可以參考下2019-12-12
mysql 數(shù)據(jù)庫(kù)安裝經(jīng)驗(yàn)問題匯總
這篇文章主要介紹了mysql 數(shù)據(jù)庫(kù)安裝經(jīng)驗(yàn)問題匯總,本文介紹的非常詳細(xì),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-09-09

