導(dǎo)讀
當(dāng)磁盤空間爆滿后,mysql會(huì)發(fā)生什么事呢?又應(yīng)該怎么應(yīng)對(duì)?
會(huì)發(fā)生什么事
當(dāng)磁盤空間寫滿了之后,MySQL是無法再寫入任何數(shù)據(jù)的,包括對(duì)表數(shù)據(jù)的寫入,以及binlog、binlog-index等文件。
當(dāng)然了,因?yàn)镮nnoDB是可以把臟數(shù)據(jù)先放在內(nèi)存里,所以不會(huì)立刻表現(xiàn)出來無法寫入,除非開啟了binlog,寫入請(qǐng)求才會(huì)被阻塞。
當(dāng)MySQL檢測(cè)到磁盤空間滿了,它會(huì):
應(yīng)該怎么辦
那么,當(dāng)發(fā)現(xiàn)磁盤空間滿了之后,我們應(yīng)該怎么處理呢,建議:
-
每分鐘:檢查空間是否得到釋放,以便寫入新數(shù)據(jù)。當(dāng)發(fā)現(xiàn)有剩余空間了,就會(huì)繼續(xù)寫入數(shù)據(jù),一切照舊。
-
每十分鐘:如果還是發(fā)現(xiàn)沒剩余空間,則會(huì)在日志中寫入一條記錄,報(bào)告磁盤空間滿(這時(shí)候只寫入幾個(gè)字節(jié)還是夠的)。
-
提高監(jiān)控系統(tǒng)檢測(cè)頻率,預(yù)防再次發(fā)生;
-
及時(shí)刪除不用的文件,釋放空間;
-
若有線程因磁盤滿的問題被阻塞了,可先殺掉,等到下一分鐘重新檢測(cè)時(shí)它可能又可以正常工作了;
-
可能因磁盤滿導(dǎo)致某些線程被阻塞,引發(fā)其他線程也被阻塞,可把導(dǎo)致阻塞的線程殺掉,其他被阻塞的線程也就能繼續(xù)工作了。
例外
有個(gè)例外的情況是:
當(dāng)執(zhí)行 REPAIR TABLE 或者 OPTIMIZE TABLE 操作時(shí),或者執(zhí)行完 LOAD DATA INFILE 或 ALTER TABLE 之后批量更新索引時(shí),這些操作會(huì)創(chuàng)建臨時(shí)文件,當(dāng)執(zhí)行這些操作過程中mysqld發(fā)現(xiàn)磁盤空間滿了,就會(huì)把這個(gè)涉及到的表標(biāo)記為crashed,刪掉臨時(shí)文件(除了 ALTER TABLE 操作,MySQL會(huì)放棄正在執(zhí)行的操作,刪除臨時(shí)文件,釋放磁盤空間)。
備注:當(dāng)執(zhí)行這些命令過程中mysqld進(jìn)程被意外被殺掉的話,其所生成臨時(shí)文件不會(huì)自動(dòng)刪除,需要手工刪掉才能釋放磁盤空間。
以上就是磁盤空間滿了之后MySQL會(huì)怎樣的內(nèi)容,更多相關(guān)內(nèi)容請(qǐng)關(guān)注PHP中文網(wǎng)(www.php.cn)!