解決MySQL實(shí)例空間滿自動(dòng)鎖定的問(wèn)題
RDS MySQL實(shí)例由于慢SQL、插入數(shù)據(jù)多等原因?qū)е聦?shí)例空間滿,為避免數(shù)據(jù)丟失,RDS會(huì)對(duì)實(shí)例進(jìn)行自動(dòng)鎖定,鎖定之后,將無(wú)法進(jìn)行寫入操作。您可以參照本文清理數(shù)據(jù)文件、臨時(shí)文件、Binlog文件、undo文件和general_log文件,解決存儲(chǔ)空間問(wèn)題。
問(wèn)題描述
阿里云RDS MySQL版實(shí)例由于慢SQL、插入數(shù)據(jù)多等原因?qū)е聦?shí)例磁盤空間滿,為避免數(shù)據(jù)丟失,實(shí)例會(huì)自動(dòng)鎖定,且無(wú)法進(jìn)行寫入操作,導(dǎo)致在實(shí)例詳情頁(yè)面的運(yùn)行狀態(tài)為鎖定中。
常見原因
造成實(shí)例空間滿的主要原因有以下幾種:
數(shù)據(jù)文件磁盤空間占用高。
日志文件磁盤空間占用高。
在沒(méi)有正確設(shè)置日志備份策略時(shí),可能會(huì)由于大事務(wù)SQL導(dǎo)致日志增長(zhǎng)較快。
臨時(shí)文件磁盤空間占用高。
通常導(dǎo)致臨時(shí)文件占用高的原因是由于查詢語(yǔ)句的排序、分組、關(guān)聯(lián)表產(chǎn)生的臨時(shí)表文件,或者大事務(wù)未提交前產(chǎn)生的日志緩存文件。
系統(tǒng)文件磁盤空間占用高。
系統(tǒng)文件過(guò)大主要是由于undo文件過(guò)大。當(dāng)存在對(duì)InnoDB表長(zhǎng)時(shí)間不結(jié)束的查詢語(yǔ)句,而且在查詢過(guò)程中表有大量的數(shù)據(jù)變化時(shí),系統(tǒng)會(huì)生成大量的undo信息,占用大量存儲(chǔ)空間。
說(shuō)明對(duì)于RDS MySQL 8.0,系統(tǒng)會(huì)自動(dòng)清理undo文件,不會(huì)出現(xiàn)此問(wèn)題。
general_log文件磁盤占用高。
當(dāng)RDS MySQL開啟了general_log后,該文件記錄了用戶的所有操作,包括每條SQL語(yǔ)句的執(zhí)行細(xì)節(jié),無(wú)論是查詢、插入、更新還是刪除操作。當(dāng)訪問(wèn)量大或者長(zhǎng)時(shí)間不清理general_log文件時(shí),會(huì)占用大量的存儲(chǔ)空間,導(dǎo)致存儲(chǔ)空間耗盡。您可以通過(guò)如下方法確認(rèn)general_log文件大小。
查看實(shí)例存儲(chǔ)空間使用量,判斷sys_data_size文件是否過(guò)大。詳情請(qǐng)參見查看監(jiān)控信息。
查看實(shí)例是否已開啟general_log(運(yùn)行參數(shù)值為ON)。詳情請(qǐng)參見查看實(shí)例參數(shù)。
連接RDS MySQL實(shí)例并執(zhí)行如下語(yǔ)句,查詢general_log文件大小。連接實(shí)例的詳細(xì)請(qǐng)參見連接RDS MySQL實(shí)例。
SELECT table_schema AS '數(shù)據(jù)庫(kù)', table_name,SUM(data_length + index_length + data_free)/1024/1024 AS "表大小MB",SUM(DATA_FREE)/1024/1024 AS "碎片大小MB" FROM information_schema.TABLES WHERE table_name='general_log'
說(shuō)明此SQL語(yǔ)句會(huì)從
information_schema
數(shù)據(jù)庫(kù)的TABLES
表中檢索mysql.general_log
表的數(shù)據(jù),然后將其轉(zhuǎn)換成以MB為單位的大小。此SQL語(yǔ)句獲得的數(shù)據(jù)為抽樣數(shù)據(jù),和實(shí)際數(shù)據(jù)存在一定誤差。
解決辦法
執(zhí)行以下步驟,定位問(wèn)題并按照對(duì)應(yīng)的解決方法處理:
- 訪問(wèn)RDS實(shí)例列表,在上方選擇地域,然后單擊目標(biāo)實(shí)例ID。
在左側(cè)導(dǎo)航欄中單擊監(jiān)控與報(bào)警,查看占用存儲(chǔ)空間的文件類型。詳情請(qǐng)參見查看監(jiān)控信息。
選擇對(duì)應(yīng)的解決方法:
說(shuō)明清理磁盤空間后,需要耐心等待一段時(shí)間(5~15分鐘左右),RDS實(shí)例才會(huì)解鎖。