我有一個 MySQL 資料庫表,其中有 31,107,600 行。它使用 InnoDB。這是在 CentOS 7 系統上。
該表包含以下幾列:
- ID
- 時間戳
- 蘋果
- 數據
- 方向
- 網站 ID
我想創建一個索引,所以我運行以下命令:
ALTER TABLE MY_TABLE ADD INDEX idx_my_index (mac, site_id, timestamp);
大約需要 30 秒,然後給我這個:
ERROR 1114 (HY000): The table 'MY_TABLE' is full
我的 MySQL 使用預設值/var/lib/mysql
來儲存其資料。目前,該資料夾所在的分割區有 12GB 可用空間,而我的資料庫大小只有 2.7GB,所以據我所知,它應該有足夠的空間。
為什麼我會看到這個錯誤?網路上查了一下,可能是使用了臨時表,並且命中了臨時表大小的限制?會是這樣嗎?還是其他東西?我如何確認這一點?
答案1
當 ALTER TABLE 語句運作時,使用 df 觀察所有檔案系統上的空間使用情況。查看另一個檔案系統(尤其是小檔案系統)上的空間是否正在快速減少,例如 tmpfs 上是否有 /tmp。