MYSQL如何優(yōu)雅的刪除二進制日志binlog
摘要
MySQL 的二進制日志(binlog)是用于記錄所有修改數(shù)據(jù)庫的操作的文件,包括增刪改等操作。這些操作記錄在二進制日志中,可以用于數(shù)據(jù)恢復(fù)、數(shù)據(jù)同步等操作。但是,隨著時間的推移,二進制日志文件會越來越多,占用大量磁盤空間。因此,需要定期清理二進制日志文件。
注意:mysql的binlog日志不可以簡單粗暴的直接刪除,否則后果不堪設(shè)想?。。?/strong>
1、查看日志文件
通過命令查看binlog日志文件信息,通過數(shù)據(jù)庫UI工具或者服務(wù)器mysql控制臺執(zhí)行都行。以下兩個命令效果是一樣的。
命令1
show master logs;
命令2
show binary logs;
如下是在navicat中的效果,第一列是日志名稱,第二列是文件大小,mysql8.0中會多一列Encrpted。

2、刪除binlog
2.1、手動方式刪除
注意此處的手動刪除并不是rm -rf ,此種刪除方式是指通過命令方式刪除
方式1:刪除指定文件之前的日志,但不包括指定的日志
purge binary logs to 'mysql-bin.000068';

刪除后,我們可以看到mysql-bin.000067被刪除了,mysql-bin.000068還在。


方式2:刪除指定日期之前的日志
purge binary logs before '2021-08-22 18:00:00';
操作樣例:略
2.2、自動清除
除了手動方式清除外,msyql也提供了自動清除方案,mysql不同版本方式也有些許不同,具體如下:
2.2.1、Mysql 5.7
expire_logs_days 是 MySQL 中用于控制二進制日志文件保留時間的參數(shù)。二進制日志是 MySQL 中用于記錄所有修改數(shù)據(jù)庫的操作的文件,包括增刪改等操作。這些操作記錄在二進制日志中,可以用于數(shù)據(jù)恢復(fù)、數(shù)據(jù)同步等操作。
expire_logs_days 參數(shù)用于控制二進制日志文件的保留時間,如果一個二進制日志文件的創(chuàng)建時間早于 expire_logs_days 天,則這個文件會被自動刪除。這個參數(shù)的默認值是 0,表示不自動刪除二進制日志文件。expire_logs_days 參數(shù)的設(shè)置范圍是 0 到 4294967295(2的32次方減1),單位是天。需要注意的是,如果將 expire_logs_days 參數(shù)設(shè)置為一個非常大的值,可能會導(dǎo)致磁盤空間不足。因此,在設(shè)置 expire_logs_days 參數(shù)時,需要根據(jù)實際情況進行調(diào)整,確保磁盤空間充足,并且能夠滿足數(shù)據(jù)恢復(fù)、數(shù)據(jù)同步等操作的需求。另外,需要注意的是,expire_logs_days 參數(shù)只控制二進制日志文件的保留時間,不會對已經(jīng)寫入的二進制日志文件進行刪除。如果需要刪除已經(jīng)寫入的二進制日志文件,可以使用 PURGE BINARY LOGS 命令。
可以通過以下命令查看當前 MySQL 實例中的 expire_logs_days 參數(shù)值:
SHOW VARIABLES LIKE 'expire_logs_days';

可以通過以下命令設(shè)置 expire_logs_days 參數(shù)的值:
SET GLOBAL expire_logs_days = 30;
這個命令將 expire_logs_days 參數(shù)的值設(shè)置為 30,表示保留 30 天內(nèi)的二進制日志文件,超過 30天的文件會被自動刪除。
需要注意的是,如果設(shè)置了 expire_logs_days 參數(shù),但是沒有啟用二進制日志,這個參數(shù)是沒有作用的。
設(shè)置之后不會立即清除,觸發(fā)條件是:
- binlog大小超過max_binlog_size
- 手動執(zhí)行flush logs
- 重新啟動時(MySQL將會new一個新文件用于記錄binlog)
此處我們可以通過方式2進行觸發(fā)
flush logs;

2.2.2、Mysql8.0版本
1.查看binlog的過期相關(guān)的全局變量
show variables like '%expire%';

2.參數(shù)說明
8.0版本的過期時間全局變量有binlog_expire_logs_seconds 和binlog_expire_logs_auto_purge,單位是秒管理時間粒度更小更符合實際應(yīng)用場景,同時還有expire_logs_days這個,但是準備棄用了,在未來版本中會被移除。參數(shù)說明如下
binlog_expire_logs_seconds 和 binlog_expire_logs_auto_purge 是 MySQL 8.0 中用于控制二進制日志文件保留時間的參數(shù)。
binlog_expire_logs_seconds 參數(shù)用于控制二進制日志文件的保留時間,單位是秒。如果一個二進制日志文件的創(chuàng)建時間早于 binlog_expire_logs_seconds 秒,則這個文件會被自動刪除。這個參數(shù)的默認值是 2592000 秒(30 天),表示保留 30 天內(nèi)的二進制日志文件,超過 30 天的文件會被自動刪除。
binlog_expire_logs_auto_purge 參數(shù)用于控制是否自動清除過期的二進制日志文件。如果將這個參數(shù)設(shè)置為 ON,則 MySQL 會自動清除過期的二進制日志文件。這個參數(shù)的默認值是 ON。
可以通過以下命令查看當前 MySQL 實例中的 binlog_expire_logs_seconds 和 binlog_expire_logs_auto_purge 參數(shù)值:
SHOW VARIABLES LIKE 'binlog_expire_logs_seconds'; SHOW VARIABLES LIKE 'binlog_expire_logs_auto_purge';
可以通過以下命令設(shè)置 binlog_expire_logs_seconds 和 binlog_expire_logs_auto_purge 參數(shù)的值:
SET GLOBAL binlog_expire_logs_seconds = 86400; SET GLOBAL binlog_expire_logs_auto_purge = OFF;
這個命令將 binlog_expire_logs_seconds 參數(shù)的值設(shè)置為 86400 秒(1 天),表示保留 1 天內(nèi)的二進制日志文件,超過 1 天的文件會被自動刪除。將 binlog_expire_logs_auto_purge 參數(shù)的值設(shè)置為 OFF,表示不自動清除過期的二進制日志文件。
需要注意的是,二進制日志文件的清除策略需要根據(jù)實際情況進行調(diào)整,確保磁盤空間充足,并且能夠滿足數(shù)據(jù)恢復(fù)、數(shù)據(jù)同步等操作的需求。在清除二進制日志文件時,需要確保不會影響正在寫入的二進制日志文件,并且需要備份好重要的二進制日志文件,以便進行數(shù)據(jù)恢復(fù)、數(shù)據(jù)同步等操作。
| 參數(shù)名 | ||
|---|---|---|
| binlog_expire_logs_seconds | binlog可以以秒為單位進行清理,之前參數(shù)是按照expire_logs_days天為刪除,有時因1天當中,可能會生成幾百G的binlog日志,導(dǎo)致空間不夠用,手動或腳本清理。現(xiàn)在不需要那麻煩。更貼合現(xiàn)狀的解決方案 | |
| expire_logs_days | 準備棄用,在未來版本中會被移除 | |
| binlog_expire_logs_auto_purge | binlog用于控制日志自動清理機制,MySQL 8.0.29開始,可以通過將binlog_expire_logs_auto_purge系統(tǒng)變量設(shè)置為OFF來禁用binlog的自動清除。這優(yōu)先于binlog_expire_logs_seconds的任何設(shè)置 |
按照下面代碼注釋記錄:expire_logs_days準備廢棄,binlog_expire_logs_auto_purge 和binlog_expire_logs_seconds 需要配合使用。
3 Warning 1287 '@@expire_logs_days' is deprecated and will be removed
in a future release. Please use binlog_expire_logs_seconds instead.
# ASSERT: If binlog_expire_logs_auto_purge is set to ON, then the server
# MUST purge automatically binary log files according to the
# binlog_expire_logs_seconds setting.
#
#
# ASSERT: If binlog_expire_logs_auto_purge is set to ON and both
# binlog_expire_logs_seconds and expire_logs_days are set to 0,
# then binary log files SHALL NOT be automatically purged.
#
到此這篇關(guān)于MYSQL如何優(yōu)雅的刪除二進制日志binlog的文章就介紹到這了,更多相關(guān)MYSQL刪除二進制日志binlog內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
mysql 8.0.22壓縮包完整安裝與配置教程圖解(親測安裝有效)
這篇文章主要介紹了mysql 8.0.22壓縮包完整安裝與配置教程圖解(親測安裝有效),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12
navicat創(chuàng)建MySql定時任務(wù)的方法詳解
這篇文章主要介紹了navicat創(chuàng)建MySql定時任務(wù)的方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
MySQL連表更新實現(xiàn)高效數(shù)據(jù)同步的實戰(zhàn)指南
在數(shù)據(jù)庫開發(fā)中,連表更新(JOIN UPDATE)是一種常見且強大的操作,它允許我們基于關(guān)聯(lián)表的數(shù)據(jù)來更新目標表,本文將深入探討MySQL連表更新的語法、應(yīng)用場景、性能優(yōu)化及常見陷阱,幫助開發(fā)者掌握這一核心技能,需要的朋友可以參考下2026-02-02
MySQL5.73?root用戶密碼修改方法及ERROR?1193、ERROR1819與ERROR1290報錯解決
這篇文章主要給大家介紹了關(guān)于MySQL5.73?root用戶密碼修改方法及ERROR?1193、ERROR1819與ERROR1290:...?running?with?--skip-...報錯的解決方法,文中通過圖文將解決的步驟介紹的非常詳細,需要的朋友可以參考下2023-02-02
MySQL導(dǎo)入.CSV數(shù)據(jù)中文亂碼的解決方式
當將xls或xlsx文件轉(zhuǎn)換為CSV并導(dǎo)入數(shù)據(jù)庫時,可能出現(xiàn)亂碼,原因是編碼格式不是UTF-8,解決方法是使用Notepad或記事本打開CSV文件,所以本文給大家介紹了MySQL導(dǎo)入.CSV數(shù)據(jù)中文亂碼的解決方式,需要的朋友可以參考下2024-08-08

