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
操作將會鎖表,建議在業務低峰期操作。- 清理資料檔案有延遲,請耐心等待執行個體已使用空間的下降。
- 清理後需要耐心等待一段時間(5分鐘左右),RDS MySQL執行個體才會解鎖。
操作步驟
根據實際情況選擇相應的方法處理。
- 擴容執行個體您可以擴容磁碟空間,詳情請參見變更配置。說明 變更配置任務結束後,等待約5分鐘,RDS MySQL執行個體會進行解鎖。
- 刪除無用資料
- 通過DMS串連執行個體,詳情請參見通過DMS登入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
命令清理資料。說明 清理後需要耐心等待一段時間(5分鐘左右),RDS MySQL執行個體才會解鎖。- drop:使用
drop table <資料庫名>.<表名>
刪除不需要的表。 - truncate:使用
truncate table <資料庫名>.<表名>
刪除不需要的表。
- drop:使用
後續維護
若鎖定問題已解決,請參考以下步驟,預防再次出現鎖定問題:
- 設定儲存空間自動擴容,在儲存空間不足時,執行個體會自動擴容儲存空間,詳情請參見設定儲存空間自動擴容。
- 對於經常有
delete
操作的表,容易產生資料表空間片段,可以在業務低峰期使用optimize table <資料庫名>.<表名>
回收空間。詳情請參見使用“optimize table”命令釋放MySQL執行個體的資料表空間。