MySQL 常見日志清理策略

前言:

MySQL 數(shù)據(jù)庫服務(wù)器使用多種類型的日志來記錄操作和事件,這對(duì)于故障診斷、審計(jì)和性能分析非常重要栈拖。然而,這些日志文件會(huì)隨著時(shí)間的推移而不斷增長没陡,可能會(huì)占用大量的磁盤空間涩哟。因此,定期清理這些日志是必要的盼玄,本篇文章我們一起來學(xué)習(xí)下如何清理 MySQL 中的日志文件贴彼。

二進(jìn)制日志 (Binary Log)

binlog 記錄了數(shù)據(jù)庫所有的 DDL(數(shù)據(jù)定義語言)和 DML(數(shù)據(jù)操作語言)更改操作,一般都是建議開啟 binlog 的埃儿,要注意的是 binlog 會(huì)占用大量磁盤空間器仗,特別是你的數(shù)據(jù)庫特別繁忙的情況下。這個(gè)時(shí)候就要制定清理策略了童番。

MySQL 5.7 可以通過 expire_logs_days 參數(shù)來設(shè)置 binlog 刪除時(shí)間精钮,在 my.cnf 配置文件中設(shè)置 expire_logs_days 參數(shù),指定二進(jìn)制日志文件的過期天數(shù)剃斧,過期的日志文件將會(huì)自動(dòng)被刪除轨香。在 MySQL 8.0 中建議使用 binlog_expire_logs_seconds 參數(shù),此參數(shù)同樣是控制二進(jìn)制文件過期時(shí)間幼东,單位是秒臂容。binlog 具體要保留多久,可以根據(jù)磁盤空間決定根蟹,磁盤充足可以多保留脓杉,一般建議至少保留 7 天。

除了通過設(shè)置參數(shù)自動(dòng)清理外简逮,binlog 還可以使用 PURGE BINARY LOGS 命令來手動(dòng)執(zhí)行清理球散。例如,使用 purge binary logs to 'mysql-bin.000009' 來刪除 mysql-bin.000009 之前的日志文件散庶,或者使用 purge binary logs before '2024-07-15 00:00:00' 來刪除指定時(shí)間之前的日志文件沛婴。

通用查詢?nèi)罩?(General Query Log)

MySQL 的 general_log 是記錄所有到達(dá) MySQL 服務(wù)器的 SQL 語句的日志。由于它記錄了所有的 SQL 語句督赤,包括連接嘁灯、查詢、更新等操作躲舌,因此其日志量可能增長非常迅速丑婿,通常在生產(chǎn)環(huán)境中不建議開啟此功能,以免影響性能没卸。如果你的數(shù)據(jù)庫為了等保評(píng)測(cè)或者其他原因開啟了 general_log 羹奉,那就要及時(shí)制定清理策略了。

官方并沒有提供用于清理 general_log 的參數(shù)或命令约计,因此清理 general_log 只能各顯神通了诀拭,一般情況下可以通過寫 shell 腳本來執(zhí)行清理,比如說每天凌晨進(jìn)行日志切換煤蚌,刪除幾天前的日志文件耕挨。也可以使用 logrotate 功能來配置 general_log 自動(dòng)輪轉(zhuǎn)及清理细卧。

錯(cuò)誤日志 (Error Log)

錯(cuò)誤日志記錄 MySQL 服務(wù)器啟動(dòng)、關(guān)閉及運(yùn)行時(shí)發(fā)生的錯(cuò)誤及警告信息筒占。一般是默認(rèn)開啟的贪庙,不過錯(cuò)誤日志增長速度很慢,通常不需要頻繁清理翰苫,可以手動(dòng)清理或設(shè)置定期任務(wù)清理舊的日志文件止邮。錯(cuò)誤日志保留時(shí)間可以更長些。

慢查詢?nèi)罩?(Slow Query Log)

慢日志主要用于記錄執(zhí)行時(shí)間超過設(shè)定閾值的 SQL 查詢奏窑。慢查詢?nèi)罩緦?duì)于數(shù)據(jù)庫的性能優(yōu)化非常重要导披,因?yàn)樗梢詭椭鷶?shù)據(jù)庫管理員和開發(fā)者識(shí)別和優(yōu)化那些執(zhí)行效率低下的查詢。慢日志也是建議開啟的埃唯。

通常情況下撩匕,我們可以根據(jù)系統(tǒng)情況來設(shè)置慢 SQL 閾值,比如 1s 或 3s 筑凫。慢日志一般情況下增長速度也不是很快滑沧,只要持續(xù)進(jìn)行 SQL 優(yōu)化,慢日志會(huì)越來越少的巍实。通常慢日志也不需要頻繁清理滓技,一般我們可以每一周或每一月重命名一次,然后保留幾份這樣來制定清理策略棚潦,可以交由 shell 腳本自動(dòng)執(zhí)行令漂。

審計(jì)日志 (Audit Log)

MySQL 社區(qū)版官方并沒有提供審計(jì)日志,如果想開啟審計(jì)日志丸边,只能借助 MariaDB 或 Percona Server 等其他審計(jì)插件叠必。審計(jì)日志增長速度也比較快,一般審計(jì)插件都提供清理參數(shù)妹窖,比如說日志文件到達(dá)多少 M 自動(dòng)輪換纬朝,保留幾份日志文件等,一定要設(shè)置好此類參數(shù)骄呼,以防占用大量磁盤空間共苛。

中繼日志 (Relay Log)

中繼日志是 MySQL 復(fù)制過程中用于存儲(chǔ)從主服務(wù)器接收的二進(jìn)制日志事件的臨時(shí)日志文件。這些日志文件由從服務(wù)器用來應(yīng)用來自主服務(wù)器的更新蜓萄。中繼日志只存在于從服務(wù)器上隅茎,relay log 文件會(huì)隨著事件被應(yīng)用而逐漸增長,因此也需要適當(dāng)?shù)那謇聿呗詠砉芾磉@些文件嫉沽。

MySQL 官方提供了 relay_log_pure 參數(shù)辟犀,此參數(shù)決定了 relay log 文件在被完全應(yīng)用后是否應(yīng)該被自動(dòng)刪除。這個(gè)參數(shù)有兩個(gè)可能的值:ON 和 OFF 绸硕,設(shè)置為 ON 代表當(dāng)中繼日志應(yīng)用完成后會(huì)自動(dòng)刪除堂竟,OFF 則不會(huì)自動(dòng)刪除魂毁。一般情況下,建議開啟此參數(shù)跃捣,這樣 relay log 應(yīng)用完就會(huì)被清理掉漱牵,不會(huì)占用大量磁盤空間夺蛇。

如果你的從服務(wù)器要求關(guān)閉 relay_log_pure 參數(shù)疚漆,例如在 MHA 高可用架構(gòu)下,為了確保在故障轉(zhuǎn)移時(shí)能夠使用 relay log 進(jìn)行恢復(fù)刁赦,通常需要禁用從服務(wù)器上的中繼日志自動(dòng)清理功能娶聘。這個(gè)時(shí)候就要想其他辦法來清理 relay log 了。MHA 提供了一個(gè)名為 purge_relay_logs 的 perl 腳本甚脉,可通過 purge_relay_logs 腳本配合 cronjob 來完成此清理任務(wù)丸升。若 purge_relay_logs 腳本無法使用,那么只能自己寫 shell 腳本了牺氨,比如可以定期將 relay_log_pure 設(shè)為 ON 狡耻,然后執(zhí)行 flush relay logs 后,再將 relay_log_pure 設(shè)為 OFF 猴凹,這樣操作下來一般也能實(shí)現(xiàn)清理 relay log 夷狰。實(shí)在不行我們還可以使用 find 命令來找到幾天前的日志文件,然后直接 rm 清理掉郊霎,不過用 find 找到后直接 rm 刪除這種方法會(huì)導(dǎo)致 relay-log.indx 索引文件中記錄 relay log 與實(shí)際存在的不匹配沼头,所以直接 rm 刪除 relay log 后還要記得更新下 relay-log.indx 索引文件。

總結(jié):

本篇文章簡單介紹了 MySQL 中六種常見日志及其清理策略书劝,不同環(huán)境可以采用不同的清理策略进倍,本文只是提供一種思路,方法各種各樣购对,重要的是要根據(jù)實(shí)際情況制定合理的日志保留策略猾昆,并確保不會(huì)影響到數(shù)據(jù)庫的正常運(yùn)行和備份需求。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末骡苞,一起剝皮案震驚了整個(gè)濱河市垂蜗,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌烙如,老刑警劉巖么抗,帶你破解...
    沈念sama閱讀 218,682評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異亚铁,居然都是意外死亡蝇刀,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,277評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門徘溢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吞琐,“玉大人捆探,你說我怎么就攤上這事≌舅冢” “怎么了黍图?”我有些...
    開封第一講書人閱讀 165,083評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長奴烙。 經(jīng)常有香客問我助被,道長,這世上最難降的妖魔是什么切诀? 我笑而不...
    開封第一講書人閱讀 58,763評(píng)論 1 295
  • 正文 為了忘掉前任揩环,我火速辦了婚禮,結(jié)果婚禮上幅虑,老公的妹妹穿的比我還像新娘丰滑。我一直安慰自己,他們只是感情好倒庵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,785評(píng)論 6 392
  • 文/花漫 我一把揭開白布褒墨。 她就那樣靜靜地躺著,像睡著了一般擎宝。 火紅的嫁衣襯著肌膚如雪郁妈。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,624評(píng)論 1 305
  • 那天认臊,我揣著相機(jī)與錄音圃庭,去河邊找鬼。 笑死失晴,一個(gè)胖子當(dāng)著我的面吹牛剧腻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播涂屁,決...
    沈念sama閱讀 40,358評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼书在,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了拆又?” 一聲冷哼從身側(cè)響起儒旬,我...
    開封第一講書人閱讀 39,261評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎帖族,沒想到半個(gè)月后栈源,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,722評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡竖般,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年甚垦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,030評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡艰亮,死狀恐怖闭翩,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情迄埃,我是刑警寧澤疗韵,帶...
    沈念sama閱讀 35,737評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站侄非,受9級(jí)特大地震影響蕉汪,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜彩库,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,360評(píng)論 3 330
  • 文/蒙蒙 一肤无、第九天 我趴在偏房一處隱蔽的房頂上張望先蒋。 院中可真熱鬧骇钦,春花似錦、人聲如沸竞漾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,941評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽业岁。三九已至鳞仙,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間笔时,已是汗流浹背棍好。 一陣腳步聲響...
    開封第一講書人閱讀 33,057評(píng)論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留允耿,地道東北人借笙。 一個(gè)月前我還...
    沈念sama閱讀 48,237評(píng)論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像较锡,于是被迫代替她去往敵國和親业稼。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,976評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容