MYSQL如何優(yōu)雅的刪除二進(jìn)制日志binlog
摘要
MySQL 的二進(jìn)制日志(binlog)是用于記錄所有修改數(shù)據(jù)庫的操作的文件,包括增刪改等操作。這些操作記錄在二進(jìn)制日志中,可以用于數(shù)據(jù)恢復(fù)、數(shù)據(jù)同步等操作。但是,隨著時間的推移,二進(jìn)制日志文件會越來越多,占用大量磁盤空間。因此,需要定期清理二進(jìn)制日志文件。
注意:mysql的binlog日志不可以簡單粗暴的直接刪除,否則后果不堪設(shè)想?。?!
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 中用于控制二進(jìn)制日志文件保留時間的參數(shù)。二進(jìn)制日志是 MySQL 中用于記錄所有修改數(shù)據(jù)庫的操作的文件,包括增刪改等操作。這些操作記錄在二進(jìn)制日志中,可以用于數(shù)據(jù)恢復(fù)、數(shù)據(jù)同步等操作。
expire_logs_days
參數(shù)用于控制二進(jìn)制日志文件的保留時間,如果一個二進(jìn)制日志文件的創(chuàng)建時間早于 expire_logs_days
天,則這個文件會被自動刪除。這個參數(shù)的默認(rèn)值是 0,表示不自動刪除二進(jìn)制日志文件。expire_logs_days
參數(shù)的設(shè)置范圍是 0 到 4294967295(2的32次方減1),單位是天。需要注意的是,如果將 expire_logs_days
參數(shù)設(shè)置為一個非常大的值,可能會導(dǎo)致磁盤空間不足。因此,在設(shè)置 expire_logs_days
參數(shù)時,需要根據(jù)實際情況進(jìn)行調(diào)整,確保磁盤空間充足,并且能夠滿足數(shù)據(jù)恢復(fù)、數(shù)據(jù)同步等操作的需求。另外,需要注意的是,expire_logs_days
參數(shù)只控制二進(jìn)制日志文件的保留時間,不會對已經(jīng)寫入的二進(jìn)制日志文件進(jìn)行刪除。如果需要刪除已經(jīng)寫入的二進(jìn)制日志文件,可以使用 PURGE BINARY LOGS
命令。
可以通過以下命令查看當(dāng)前 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)的二進(jìn)制日志文件,超過 30天的文件會被自動刪除。
需要注意的是,如果設(shè)置了 expire_logs_days
參數(shù),但是沒有啟用二進(jìn)制日志,這個參數(shù)是沒有作用的。
設(shè)置之后不會立即清除,觸發(fā)條件是:
- binlog大小超過max_binlog_size
- 手動執(zhí)行flush logs
- 重新啟動時(MySQL將會new一個新文件用于記錄binlog)
此處我們可以通過方式2進(jìn)行觸發(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這個,但是準(zhǔn)備棄用了,在未來版本中會被移除。參數(shù)說明如下
binlog_expire_logs_seconds
和 binlog_expire_logs_auto_purge
是 MySQL 8.0 中用于控制二進(jìn)制日志文件保留時間的參數(shù)。
binlog_expire_logs_seconds
參數(shù)用于控制二進(jìn)制日志文件的保留時間,單位是秒。如果一個二進(jìn)制日志文件的創(chuàng)建時間早于 binlog_expire_logs_seconds
秒,則這個文件會被自動刪除。這個參數(shù)的默認(rèn)值是 2592000 秒(30 天),表示保留 30 天內(nèi)的二進(jìn)制日志文件,超過 30 天的文件會被自動刪除。
binlog_expire_logs_auto_purge
參數(shù)用于控制是否自動清除過期的二進(jìn)制日志文件。如果將這個參數(shù)設(shè)置為 ON,則 MySQL 會自動清除過期的二進(jìn)制日志文件。這個參數(shù)的默認(rèn)值是 ON。
可以通過以下命令查看當(dāng)前 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)的二進(jìn)制日志文件,超過 1 天的文件會被自動刪除。將 binlog_expire_logs_auto_purge
參數(shù)的值設(shè)置為 OFF,表示不自動清除過期的二進(jìn)制日志文件。
需要注意的是,二進(jìn)制日志文件的清除策略需要根據(jù)實際情況進(jìn)行調(diào)整,確保磁盤空間充足,并且能夠滿足數(shù)據(jù)恢復(fù)、數(shù)據(jù)同步等操作的需求。在清除二進(jìn)制日志文件時,需要確保不會影響正在寫入的二進(jìn)制日志文件,并且需要備份好重要的二進(jìn)制日志文件,以便進(jìn)行數(shù)據(jù)恢復(fù)、數(shù)據(jù)同步等操作。
參數(shù)名 | ||
---|---|---|
binlog_expire_logs_seconds | binlog可以以秒為單位進(jìn)行清理,之前參數(shù)是按照expire_logs_days天為刪除,有時因1天當(dāng)中,可能會生成幾百G的binlog日志,導(dǎo)致空間不夠用,手動或腳本清理。現(xiàn)在不需要那麻煩。更貼合現(xiàn)狀的解決方案 | |
expire_logs_days | 準(zhǔn)備棄用,在未來版本中會被移除 | |
binlog_expire_logs_auto_purge | binlog用于控制日志自動清理機(jī)制,MySQL 8.0.29開始,可以通過將binlog_expire_logs_auto_purge系統(tǒng)變量設(shè)置為OFF來禁用binlog的自動清除。這優(yōu)先于binlog_expire_logs_seconds的任何設(shè)置 |
按照下面代碼注釋記錄:expire_logs_days準(zhǔn)備廢棄,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)雅的刪除二進(jìn)制日志binlog的文章就介紹到這了,更多相關(guān)MYSQL刪除二進(jìn)制日志binlog內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
myeclipse中連接mysql數(shù)據(jù)庫示例代碼
這篇文章主要為大家詳細(xì)介紹了MyEclipse連接MySQL數(shù)據(jù)庫圖文教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-10-10MySql修改數(shù)據(jù)庫編碼為UTF8避免造成亂碼問題
mysql 創(chuàng)建數(shù)據(jù)庫時指定編碼很重要,很多開發(fā)者都使用了默認(rèn)編碼,亂碼問題可是防不勝防,下面與大家分享下通過修改數(shù)據(jù)庫默認(rèn)編碼方式為UTF8來減少數(shù)據(jù)庫創(chuàng)建時的設(shè)置,避免因粗心造成的亂碼問題2013-06-06快速解決MySQL服務(wù)無法啟動顯示:系統(tǒng)出錯,發(fā)生系統(tǒng)錯誤1067, 進(jìn)程意外終止的兩種方法
本人因為phpstudy的MySQL數(shù)據(jù)庫與我的電腦上的MySQL數(shù)據(jù)庫發(fā)生沖突,當(dāng)我將MySQL服務(wù)器的服務(wù)名從MySQL改為MySQL5后,啟動MySQL5服務(wù)后就報錯:系統(tǒng)出錯, 發(fā)生系統(tǒng)錯誤 1067, 進(jìn)程意外終止,現(xiàn)在將這個解決方法分享給大家,需要的朋友可以參考下2024-06-0621條MySQL優(yōu)化建議(經(jīng)驗總結(jié))
這篇文章主要介紹了21條MySQL優(yōu)化建議,均來自個人的實戰(zhàn)經(jīng)驗總結(jié),需要的朋友可以參考下2014-07-07MySQL 5.7 mysql command line client 使用命令詳解
這篇文章主要介紹了MySQL 5.7 mysql command line client 使用命令,需要的朋友可以參考下2017-06-06