RDS MySQL執行個體可能會由於資料檔案長時間未整理導致執行個體空間被佔滿,為避免資料丟失,RDS MySQL會對執行個體進行自動鎖定,磁碟鎖定之後,將無法進行寫入操作。
問題描述
雲資料庫RDS MySQL執行個體由於寫入的資料太多,導致資料檔案佔滿磁碟空間,從而導致執行個體的運行狀態為鎖定中。
問題原因
RDS MySQL執行個體可能會由於資料檔案長時間未整理導致執行個體空間滿,為避免資料丟失,RDS MySQL會對執行個體進行自動鎖定,鎖定之後將無法進行寫入操作。
解決方案
前提條件
RDS MySQL 5.6、5.7、8.0版本的執行個體,確認核心小版本大於等於20190815。如果核心小版本小於20190815,需要在升級核心小版本後才能執行清理資料的操作。
注意事項
刪除表前請確保已進行資料備份,以免造成損失。
RDS MySQL中
delete命令是無法釋放空間,推薦使用drop或truncate命令釋放空間。使用OPTIMIZE TABLE命令釋放MySQL執行個體的資料表空間操作將會鎖表,建議在業務低峰期操作。
清理資料檔案有延遲,請耐心等待執行個體已使用空間的下降。
操作步驟
根據實際情況選擇相應的方法處理。
擴容執行個體
您可以擴容磁碟空間。
變更配置任務結束後,等待約5分鐘,RDS MySQL執行個體會進行解鎖。
刪除無用資料或無用表
重要刪除表前請確保已進行資料備份,以免造成損失。
清理後,等待約5分鐘,RDS MySQL執行個體才會解鎖。
在SQL Console頁,執行如下命令查看資料庫的檔案大小,確認其中可以刪除的歷史資料或無用資料。
SELECT file_name, concat(TOTAL_EXTENTS,'M') as 'FIle_size' FROM INFORMATION_SCHEMA.FILES order by TOTAL_EXTENTS DESC使用
drop或truncate命令清理資料。drop:使用
drop table <資料庫名>.<表名>刪除不需要的表。truncate:使用
truncate table <資料庫名>.<表名>刪除不需要的表。
後續維護
若鎖定問題已解決,請參考以下步驟,預防再次出現鎖定問題:
設定儲存空間自動擴容,在儲存空間不足時,執行個體會自動擴容儲存空間。
對於經常有
delete操作的表,容易產生資料表空間片段,可以在業務低峰期使用OPTIMIZE TABLE命令釋放MySQL執行個體的資料表空間。