磁盤空間滿了之后MySQL會(huì)怎樣
當(dāng)磁盤空間爆滿后,MySQL會(huì)發(fā)生什么事呢?又應(yīng)該怎么應(yīng)對(duì)?
當(dāng)磁盤空間寫滿了之后,MySQL是無(wú)法再寫入任何數(shù)據(jù)的,包括對(duì)表數(shù)據(jù)的寫入,以及binlog、binlog-index等文件。
當(dāng)然了,因?yàn)镮nnoDB是可以把臟數(shù)據(jù)先放在內(nèi)存里,所以不會(huì)立刻表現(xiàn)出來(lái)無(wú)法寫入,除非開(kāi)啟了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)沒(méi)剩余空間,則會(huì)在日志中寫入一條記錄,報(bào)告磁盤空間滿(這時(shí)候只寫入幾個(gè)字節(jié)還是夠的)。
提高監(jiān)控系統(tǒng)檢測(cè)頻率,預(yù)防再次發(fā)生;
及時(shí)刪除不用的文件,釋放空間;
若有線程因磁盤滿的問(wèn)題被阻塞了,可先殺掉,等到下一分鐘重新檢測(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í)行這些操作過(guò)程中mysqld發(fā)現(xiàn)磁盤空間滿了,就會(huì)把這個(gè)涉及到的表標(biāo)記為crashed,刪掉臨時(shí)文件(除了 ALTER TABLE 操作,MySQL會(huì)放棄正在執(zhí)行的操作,刪除臨時(shí)文件,釋放磁盤空間)。
備注:當(dāng)執(zhí)行這些命令過(guò)程中mysqld進(jìn)程被意外被殺掉的話,其所生成臨時(shí)文件不會(huì)自動(dòng)刪除,需要手工刪掉才能釋放磁盤空間。
相關(guān)文章:
1. Sql Server2005學(xué)習(xí)日記(01)2. MariaDB10.5.6的安裝與使用詳解3. Sql server STUFF的用法4. MySQL基礎(chǔ)教程11 —— 函數(shù)之Cast函數(shù)和操作符5. debian10 mariadb安裝過(guò)程詳解6. SQLite教程(三):數(shù)據(jù)表和視圖簡(jiǎn)介7. MySQL mysqladmin客戶端的使用簡(jiǎn)介8. 用SQL Server為Web瀏覽器提供圖像(三)(轉(zhuǎn))9. mysql遠(yuǎn)程登錄root賬戶報(bào)錯(cuò)1045的解決10. SQLite教程(四):內(nèi)置函數(shù)
