論壇回帖報錯 The table is full,表數據文件 .MYD 達 4,294,963,640 位元組 (≈ 4GB),MyISAM 預設 32 位元組文件指標僅能定址 4GB (2^32 位元組)。
cdb_posts (論壇帖子表)。# myisamchk -dv cdb_posts
...
Max datafile length: 4294967296 -- 4GB 上限
Max keyfile length: 4398046510079
Datafile pointer (bytes): 4 即 32 位指標。需擴大為 6/8 位元組以支援更大文件。
ALTER TABLE cdb_posts
MAX_ROWS = 1000000000
AVG_ROW_LENGTH = 15000;
MAX_ROWS:預估最大行數 (10 億)。AVG_ROW_LENGTH:預估平均行長 (15000 位元組)。pointer_bytes = ceil(log2(MAX_ROWS * AVG_ROW_LENGTH) / 8)。myisamchk -dv:Datafile pointer (bytes): 6 (48 位,定址 256TB)Max datafile length: 281474976710654 (≈ 256TB)Max keyfile length: 4398046510079 (索引仍 4GB,如需更大需 myisam_max_sort_file_size 等參數)。.MYI 索引文件略增 ~1MB (指標從 4→6 位元組),極小代價換海量容量。日記本 10 頁,目錄 1 位數字 (0-9) 足夠。塞進 2 頁變 12 頁,1 位數字不夠用 → 錯誤。
ALTER TABLE告訴資料庫:「這本子將有 10 億頁」,資料庫便分配 6 位數字目錄空間,徹底解決定址問題。
ibdata/.ibd),單表無 4GB 限制 (受限於表空間總大小 64TB)。MAX_ROWS * AVG_ROW_LENGTH 需 ≥ 未來最大可能體積,否則重建無效。pt-online-schema-change (不支援 MyISAM) / 主從切換離線重建。innodb_file_per_table=ON)。