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實例的表空間。
更多信息
文檔內容是否對您有幫助?