MySQL 数据库的有效最大表大小通常由操作系统对文件大小的限制决定,而不是由 MySQL 内部限制决定。有关操作系统文件大小限制的最新信息,请参阅特定于您的操作系统的文档。
Windows 用户请注意,FAT 和 VFAT (FAT32) 不适合用于 MySQL 的生产环境。请改用 NTFS。
如果遇到全表错误,可能有以下几种原因:
磁盘可能已满。
您正在使用表并且表空间文件
InnoDB
中的空间已用完。InnoDB
最大表空间大小也是表的最大大小。有关表空间大小限制,请参阅 第 14.23 节,“InnoDB 限制”。通常,对于大小超过 1TB 的表,建议将表分区为多个表空间文件。
您已达到操作系统文件大小限制。例如,您
MyISAM
在仅支持最大 2GB 文件大小的操作系统上使用表,并且您已达到数据文件或索引文件的此限制。您正在使用一个
MyISAM
表,并且该表所需的空间超出了内部指针大小所允许的范围。MyISAM
默认情况下允许数据和索引文件增长到 256TB,但可以将此限制更改为最大允许大小 65,536TB(256 7 − 1 字节)。如果您需要一个
MyISAM
大于默认限制的表并且您的操作系统支持大文件,则该CREATE TABLE
语句支持AVG_ROW_LENGTH
和MAX_ROWS
选项。请参阅 第 13.1.18 节,“CREATE TABLE 语句”。服务器使用这些选项来确定允许的表有多大。如果指针大小对于现有表来说太小,您可以更改选项
ALTER TABLE
以增加表的最大允许大小。请参阅第 13.1.8 节,“ALTER TABLE 语句”。ALTER TABLE tbl_name MAX_ROWS=1000000000 AVG_ROW_LENGTH=nnn;
您必须
AVG_ROW_LENGTH
仅指定具有BLOB
或TEXT
列的表;在这种情况下,MySQL 无法仅根据行数来优化所需的空间。要更改
MyISAM
表的默认大小限制,请设置myisam_data_pointer_size
,它设置用于内部行指针的字节数。MAX_ROWS
如果您未指定该选项,则该值用于设置新表的指针大小。的值myisam_data_pointer_size
可以是2到7。例如,对于使用动态存储格式的表,值4允许表最大4GB;值 6 允许表高达 256TB。使用固定存储格式的表具有更大的最大数据长度。有关存储格式特征,请参阅 第 15.2.3 节,“MyISAM 表存储格式”。You can check the maximum data and index sizes by using this statement:
SHOW TABLE STATUS FROM db_name LIKE 'tbl_name';
You also can use myisamchk -dv /path/to/table-index-file. See Section 13.7.5, “SHOW Statements”, or Section 4.6.3, “myisamchk — MyISAM Table-Maintenance Utility”.
Other ways to work around file-size limits for
MyISAM
tables are as follows:If your large table is read only, you can use myisampack to compress it. myisampack usually compresses a table by at least 50%, so you can have, in effect, much bigger tables. myisampack also can merge multiple tables into a single table. See Section 4.6.5, “myisampack — Generate Compressed, Read-Only MyISAM Tables”.
MySQL 包含一个
MERGE
库,使您能够处理MyISAM
具有与单个MERGE
表相同结构的表的集合。请参阅第 15.7 节,“MERGE 存储引擎”。
您正在使用
MEMORY
(HEAP
) 存储引擎;在这种情况下,您需要增加max_heap_table_size
系统变量的值。请参阅第 5.1.7 节,“服务器系统变量”。