MySQL?8.x中Binlog核心操作教學(xué):查看、切換、清理
Binlog(二進(jìn)制日志)是 MySQL 核心日志組件,主要用于記錄數(shù)據(jù)庫所有 DDL(表結(jié)構(gòu)變更)、DML(增刪改)操作,是數(shù)據(jù)誤恢復(fù)、操作審計(jì)、主從同步的核心依賴。
本文基于 MySQL 8.0.17 版本,結(jié)合實(shí)際環(huán)境實(shí)測(cè)結(jié)果,全程實(shí)操講解 Binlog 的開啟狀態(tài)查看、存儲(chǔ)路徑定位、手動(dòng)切換切割、安全清理,以及自動(dòng)過期清理的參數(shù)配置。
一、環(huán)境說明(實(shí)測(cè)環(huán)境)
本次實(shí)操基于 MySQL 8.0.17 版本:
mysql> show variables like '%expire%'; +--------------------------------+---------+ | Variable_name | Value | +--------------------------------+---------+ | binlog_expire_logs_seconds | 2592000 | | disconnect_on_expired_password | ON | | expire_logs_days | 0 | +--------------------------------+---------+ 3 rows in set (0.01 sec) mysql> select version(); +-----------+ | version() | +-----------+ | 8.0.17 | +-----------+ 1 row in set (0.00 sec)
二、Binlog 基礎(chǔ)信息查看
日常運(yùn)維中,首先需要掌握 Binlog 的開啟狀態(tài)、存儲(chǔ)位置、命名規(guī)則,才能進(jìn)行后續(xù)切換、清理操作,以下命令均為 MySQL 內(nèi)部執(zhí)行。
2.1 查看 Binlog 開啟狀態(tài)
MySQL 8.0 及以上版本默認(rèn)開啟 Binlog,可通過以下命令驗(yàn)證:
-- 查看 Binlog 開關(guān)狀態(tài) SHOW VARIABLES LIKE 'log_bin';

輸出說明:
- Value 為 ON:Binlog 已開啟(默認(rèn)狀態(tài));
- Value 為 OFF:未開啟,需修改配置文件添加
log_bin=ON,重啟 MySQL 生效。
2.2 查看 Binlog 存儲(chǔ)路徑與命名規(guī)則
Binlog 的存儲(chǔ)路徑和命名前綴,決定了日志文件的位置和命名格式,核心命令如下:
-- 查看 Binlog 存儲(chǔ)路徑 + 文件前綴(最關(guān)鍵) SHOW VARIABLES LIKE 'log_bin_basename'; -- 查看 Binlog 索引文件路徑(記錄所有 Binlog 文件名) SHOW VARIABLES LIKE 'log_bin_index';

關(guān)鍵說明:
存儲(chǔ)路徑:默認(rèn)跟隨 MySQL 數(shù)據(jù)目錄(如示例中的 /var/lib/mysql/);
命名規(guī)則:以 log_bin_basename 的值為前綴,后綴為 6 位自增序號(hào),例如 binlog.000001、binlog.000002,序號(hào)依次累加。

2.3 查看所有 Binlog 文件 & 當(dāng)前活躍日志
查看服務(wù)器上所有 Binlog 文件,以及當(dāng)前正在寫入的 Binlog(活躍日志),方便后續(xù)清理、切換操作:
-- 列出所有 Binlog 文件(含文件大小、是否加密) SHOW BINARY LOGS; -- 等價(jià)于 SHOW MASTER LOGS; -- 查看當(dāng)前正在寫入的 Binlog 文件及寫入位置 SHOW MASTER STATUS;
實(shí)測(cè)環(huán)境輸出示例(參考):

2.4 查看 Binlog 日志格式
Binlog 有三種日志格式,生產(chǎn)環(huán)境優(yōu)先推薦行級(jí)模式,確保數(shù)據(jù)恢復(fù)、主從同步的安全性:
SHOW VARIABLES LIKE 'binlog_format';
輸出說明:
ROW:行級(jí)模式(生產(chǎn)推薦),記錄每一行數(shù)據(jù)的變更,避免語句級(jí)模式的同步異常;STATEMENT:語句級(jí)模式,記錄執(zhí)行的 SQL 語句,可能存在同步不一致問題;MIXED:混合模式,自動(dòng)切換行級(jí)和語句級(jí),生產(chǎn)不推薦。
實(shí)測(cè)環(huán)境輸出示例(僅參考):
mysql> show variables like 'binlog_format'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | binlog_format | ROW | +---------------+-------+ 1 row in set (0.01 sec) mysql>
三、Binlog 手動(dòng)切換(日志切割)
在數(shù)據(jù)庫備份、版本變更、故障排查前,建議手動(dòng)切換 Binlog,生成新的日志文件,拆分操作區(qū)間,便于后續(xù)精準(zhǔn)定位日志、恢復(fù)數(shù)據(jù),避免單一日志文件過大。
3.1 應(yīng)用場(chǎng)景
數(shù)據(jù)庫全量備份前,切換 Binlog,確保備份后的數(shù)據(jù)變更寫入新日志,便于后續(xù)增量恢復(fù);
運(yùn)維操作(如建表、批量更新)前,切換 Binlog,若操作出錯(cuò),可精準(zhǔn)刪除該操作對(duì)應(yīng)的日志片段;
單一 Binlog 文件過大(接近默認(rèn) 1G 閾值),手動(dòng)切割,便于日志傳輸和分析。
3.2 手動(dòng)切換命令(MySQL 內(nèi)部執(zhí)行)
-- 方式1:刷新所有日志(含 Binlog、錯(cuò)誤日志、慢查詢?nèi)罩荆? FLUSH LOGS; -- 方式2:僅切換 Binlog(推薦,精準(zhǔn)控制,不影響其他日志) FLUSH BINARY LOGS;

3.3 切換生效驗(yàn)證
執(zhí)行切換命令后,通過以下命令驗(yàn)證是否生效:
SHOW MASTER STATUS;
生效表現(xiàn):當(dāng)前正在寫入的 Binlog 文件名序號(hào) +1(例如從 binlog.000003 變?yōu)?binlog.000004),后續(xù)所有數(shù)據(jù)變更均寫入新日志文件。
3.4 自動(dòng)切換觸發(fā)條件
無需人工干預(yù),滿足以下條件時(shí),MySQL 會(huì)自動(dòng)切換 Binlog:
- 當(dāng)前 Binlog 文件達(dá)到
max_binlog_size閾值(默認(rèn) 1G); - MySQL 服務(wù)重啟(包括正常重啟、異常重啟后恢復(fù));
- 執(zhí)行
FLUSH LOGS或FLUSH BINARY LOGS手動(dòng)觸發(fā)。
binlog 文件大小,實(shí)測(cè)環(huán)境示例查看結(jié)果(僅參考):
mysql> show variables like 'max_binlog_size'; +-----------------+------------+ | Variable_name | Value | +-----------------+------------+ | max_binlog_size | 1073741824 | +-----------------+------------+ 1 row in set (0.00 sec) mysql> mysql> select 1073741824/1024/1024/1024; +---------------------------+ | 1073741824/1024/1024/1024 | +---------------------------+ | 1.000000000000 | +---------------------------+ 1 row in set (0.00 sec) mysql>
四、Binlog 安全清理(手動(dòng)+自動(dòng),重點(diǎn)實(shí)測(cè)參數(shù))
Binlog 會(huì)持續(xù)占用磁盤空間,若不及時(shí)清理,可能導(dǎo)致磁盤爆滿,影響數(shù)據(jù)庫正常運(yùn)行。核心禁忌:rm -rf 嚴(yán)禁直接使用 物理刪除 Binlog 文件,會(huì)導(dǎo)致 Binlog 索引文件錯(cuò)亂、MySQL 啟動(dòng)失敗,必須通過 MySQL 內(nèi)置命令安全清理。
結(jié)合當(dāng)前實(shí)測(cè)的 binlog_expire_logs_seconds 和 expire_logs_days 參數(shù),重點(diǎn)講解自動(dòng)清理配置和手動(dòng)清理方法。
4.1 先搞懂:MySQL 8.0.17 自動(dòng)清理參數(shù)
從 MySQL 8.0 開始,官方引入了更精細(xì)的 Binlog 自動(dòng)過期清理參數(shù) binlog_expire_logs_seconds(按秒控制),優(yōu)先級(jí)高于傳統(tǒng)的 expire_logs_days(按天控制),結(jié)合實(shí)測(cè)結(jié)果詳細(xì)說明:
實(shí)測(cè)參數(shù)解讀
mysql> show variables like '%expire%'; +--------------------------------+---------+ | Variable_name | Value | +--------------------------------+---------+ | binlog_expire_logs_seconds | 2592000 | | disconnect_on_expired_password | ON | | expire_logs_days | 0 | +--------------------------------+---------+ 3 rows in set (0.00 sec) mysql>
binlog_expire_logs_seconds = 2592000:按秒控制過期時(shí)間,2592000 秒 = 30 天,意味著 Binlog 會(huì)自動(dòng)保留最近 30 天,30 天前的日志會(huì)自動(dòng)刪除;expire_logs_days = 0:按天控制過期時(shí)間,0 表示關(guān)閉按天過期功能;- 優(yōu)先級(jí)規(guī)則:
binlog_expire_logs_seconds ≠ 0 expire_logs_days只要 ,就會(huì)優(yōu)先生效, 會(huì)被忽略(這是 MySQL 8.0 的新特性)。
結(jié)論:當(dāng)前的 MySQL 8.0.17 已開啟 Binlog 自動(dòng)清理,規(guī)則為 保留最近 30 天,無需手動(dòng)干預(yù)。
修改自動(dòng)清理時(shí)間(按需調(diào)整)
若需要調(diào)整自動(dòng)保留天數(shù)(如生產(chǎn)環(huán)境保留 7 天,測(cè)試環(huán)境保留 3 天),可通過以下命令在線修改,無需重啟 MySQL,永久生效:
-- 示例1:設(shè)置自動(dòng)保留7天(7天=604800秒) SET PERSIST binlog_expire_logs_seconds = 604800; -- 示例2:設(shè)置自動(dòng)保留3天(3天=259200秒) SET PERSIST binlog_expire_logs_seconds = 259200; -- 示例3:關(guān)閉自動(dòng)清理(不推薦,會(huì)導(dǎo)致Binlog無限累積) SET PERSIST binlog_expire_logs_seconds = 0;
說明:PERSIST 關(guān)鍵字表示參數(shù)永久生效,重啟 MySQL 后不會(huì)丟失;若使用 SET GLOBAL,則僅臨時(shí)生效,重啟后恢復(fù)默認(rèn)。
4.2 手動(dòng)清理 Binlog(三種方式,按需使用)
自動(dòng)清理適用于日常運(yùn)維,若需要手動(dòng)清理過期日志(如磁盤緊急釋放空間),推薦以下三種安全方式,均在 MySQL 內(nèi)部執(zhí)行。
方式1:按時(shí)間范圍清理(最常用)
刪除指定時(shí)間點(diǎn)之前的所有 Binlog,精準(zhǔn)控制清理范圍,適合定期手動(dòng)運(yùn)維:
-- 方式1:刪除7天前所有 Binlog PURGE BINARY LOGS BEFORE NOW() - INTERVAL 7 DAY; -- 方式2:刪除指定日期時(shí)間之前的 Binlog(精準(zhǔn)到秒) PURGE BINARY LOGS BEFORE '2026-04-26 19:19:41';
方式2:按文件名精準(zhǔn)清理(最安全)
先查看所有 Binlog 文件,保留當(dāng)前活躍日志,清理前面的所有老舊日志,避免誤刪正在使用的日志:
-- 步驟1:查看所有 Binlog 文件,確認(rèn)要保留的文件 SHOW BINARY LOGS; -- 步驟2:清理指定文件之前的所有日志(保留該文件及之后的日志) -- 示例:保留 binlog.000003,刪除 binlog.000001、binlog.000002 PURGE BINARY LOGS TO 'binlog.000003';
方式3:重置所有 Binlog(僅測(cè)試環(huán)境使用)
生產(chǎn)環(huán)境、主從架構(gòu) 嚴(yán)禁使用,該命令會(huì)清空所有歷史 Binlog,日志序號(hào)從 000001 重新開始:
RESET MASTER;
4.3 清理后驗(yàn)證
執(zhí)行清理命令后,通過以下命令確認(rèn)舊日志已刪除:
SHOW BINARY LOGS;
若老舊日志已消失,僅保留目標(biāo)日志或新日志,說明清理成功。
五、日常運(yùn)維常用命令匯總(直接復(fù)制使用)
-- 1. 查看 Binlog 開啟狀態(tài) SHOW VARIABLES LIKE 'log_bin'; -- 2. 查看 Binlog 存儲(chǔ)路徑+前綴 SHOW VARIABLES LIKE 'log_bin_basename'; -- 3. 查看所有 Binlog 文件 SHOW BINARY LOGS; -- 4. 查看當(dāng)前正在寫入的 Binlog SHOW MASTER STATUS; -- 5. 查看 Binlog 日志格式 SHOW VARIABLES LIKE 'binlog_format'; -- 6. 手動(dòng)切換 Binlog(推薦) FLUSH BINARY LOGS; -- 7. 查看自動(dòng)清理參數(shù) SHOW VARIABLES LIKE '%expire%'; -- 8. 設(shè)置自動(dòng)保留7天 Binlog(永久生效) SET PERSIST binlog_expire_logs_seconds = 604800; -- 9. 按時(shí)間清理7天前 Binlog PURGE BINARY LOGS BEFORE NOW() - INTERVAL 7 DAY; -- 10. 按文件名清理(保留 binlog.000003 及之后) PURGE BINARY LOGS TO 'binlog.000003';
六、總結(jié)
本文基于 MySQL 8.0.17 實(shí)測(cè)環(huán)境,聚焦 Binlog 核心運(yùn)維操作,重點(diǎn)總結(jié)以下關(guān)鍵點(diǎn),方便日常查閱:
- 查看操作:通過
log_bin_basename、SHOW BINARY LOGS可快速定位 Binlog 位置、文件列表,掌握日志狀態(tài); - 切換操作:日常運(yùn)維(備份、變更)前,用
FLUSH BINARY LOGS手動(dòng)切換日志,拆分操作區(qū)間,便于后續(xù)排查; - 清理操作:禁止直接物理刪除 Binlog,手動(dòng)清理用
PURGE命令,自動(dòng)清理依賴 MySQL 8.0 新參數(shù)binlog_expire_logs_seconds(優(yōu)先級(jí)高于expire_logs_days); - 實(shí)測(cè)重點(diǎn):當(dāng)前環(huán)境默認(rèn)自動(dòng)保留 30 天 Binlog,無需額外配置,可按需用
SET PERSIST調(diào)整保留天數(shù); - 生產(chǎn)建議:Binlog 保留天數(shù)根據(jù)業(yè)務(wù)需求調(diào)整(核心業(yè)務(wù) 3~7 天),定期檢查磁盤空間,避免日志累積導(dǎo)致磁盤爆滿。
以上就是MySQL 8.x中Binlog核心操作教學(xué):查看、切換、清理的詳細(xì)內(nèi)容,更多關(guān)于MySQL Binlog操作的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
MySQL如何從5.5升級(jí)到8.0(使用命令行升級(jí))
最近為了解決mysql低版本的漏洞,這篇文章主要給大家介紹了關(guān)于MySQL如何從5.5升級(jí)到8.0的相關(guān)資料,主要使用的命令行升級(jí),文中通過圖文介紹的非常詳細(xì),需要的朋友可以參考下2023-03-03
MySQL安裝starting?the?server失敗的2種解決辦法(推薦!)
MySQL是一個(gè)非常強(qiáng)大的關(guān)系型數(shù)據(jù)庫,但有些初學(xué)者在安裝配置的時(shí)候,遇到種種的困難,下面這篇文章主要給大家介紹了關(guān)于MySQL安裝starting?the?server失敗的2種解決辦法,需要的朋友可以參考下2023-04-04
Mysql給普通分頁查詢結(jié)果加序號(hào)實(shí)操
這篇文章主要介紹了Mysql給普通分頁查詢結(jié)果加序號(hào)實(shí)操,文章通過圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-09-09
MySQL基礎(chǔ)教程第一篇 mysql5.7.18安裝和連接教程
這篇文章主要為大家詳細(xì)介紹了MySQL基礎(chǔ)教程第一篇,mysql5.7.18安裝和連接教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-05-05
MySQL循環(huán)語句之while循環(huán)測(cè)試
MySQL有循環(huán)語句操作,while 循環(huán)、loop循環(huán)和repeat循環(huán),目前我只測(cè)試了 while 循環(huán),下面與大家分享下2014-07-07
navicat 8 創(chuàng)建數(shù)據(jù)庫與創(chuàng)建用戶分配權(quán)限圖文方法
navicat是一款不錯(cuò)的圖形化管理mysql的工具,大家一般都是用phpmyadmin或直接命令行操作,對(duì)于不是很熟悉命令的朋友,就可以使用navicat這個(gè)工具了,方便操作。2011-04-04
MySQL中show命令方法得到表列及整個(gè)庫的詳細(xì)信息(精品珍藏)
MySQL中show 句法得到表列及整個(gè)庫的詳細(xì)信息,方便查看數(shù)據(jù)庫的詳細(xì)信息。2010-11-11

