| 錯誤訊息 | 核心原因 | 適用版本/引擎 |
|---|---|---|
| The table '...' is full | 記憶體臨時表超過 tmp_table_size | MySQL < 3.23 / HEAP 引擎 |
| The table '...' is full | InnoDB 表空間耗盡 | InnoDB |
| The table '...' is full | 作業系統檔案大小限制(2GB/4GB) | ISAM/MyISAM on 32-bit OS |
| The table '...' is full | MyISAM 內部行指標達上限 | MyISAM (未指定 MAX_ROWS) |
mysqld --tmp_table_size=64M 或 --big-tablesSET SQL_BIG_TABLES=1;ibdata1 或新增 ibdata2:innodb_data_file_path = ibdata1:12M:autoextend:max:2G;ibdata2:50M:autoextendinnodb_file_per_table=1(預設開啟),單表單獨 .ibd 檔案,便於管理。SHOW VARIABLES LIKE 'innodb_data_file_path'; / df -h 確認磁碟空間。innodb_file_per_table 分散檔案。預設 6 位元組指標支援 65,536 TB,極少觸及。若確有需求:
-- 檢查當前上限
SHOW TABLE STATUS LIKE 'tbl_name';
myisamchk -dv /path/to/tbl_name.MYI
-- 調大指標(需預估平均行長)
ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=100;
注意:僅含 BLOB/TEXT 表需指定 AVG_ROW_LENGTH,否則無法精確計算空間需求。
SHOW GLOBAL STATUS LIKE 'Created_tmp_disk_tables'; 過高→調大 tmp_table_size/max_heap_table_size。INFORMATION_SCHEMA.INNODB_SYS_TABLESPACES 監控表空間使用率。「表已滿」多為資源耗盡而非邏輯錯誤。現代 MySQL (5.6+) 配合 64 位元 OS、InnoDB file-per-table、自動擴展表空間,幾乎消除此類問題。維運重點在於容量規劃與監控告警,而非事後補救。