The effective maximum table size for MySQL databases is usually determined by operating system constraints on file sizes, not by MySQL internal limits. The following table lists some examples of operating system file-size limits. This is only a rough guide and is not intended to be definitive. For the most up-to-date information, be sure to check the documentation specific to your operating system.
|Operating System||File-size Limit|
|Win32 w/ FAT/FAT32||2GB/4GB|
|Win32 w/ NTFS||2TB (possibly larger)|
|Linux 2.2-Intel 32-bit||2GB (LFS: 4GB)|
|Linux 2.4+||(using ext3 file system) 4TB|
|OS X w/ HFS+||2TB|
Windows users, please note that FAT and VFAT (FAT32) are not considered suitable for production use with MySQL. Use NTFS instead.
On Linux 2.2, you can get
larger than 2GB in size by using the Large File Support (LFS)
patch for the ext2 file system. Most current Linux distributions
are based on kernel 2.4 or higher and include all the required
LFS patches. On Linux 2.4, patches also exist for ReiserFS to
get support for big files (up to 2TB). With JFS and XFS,
petabyte and larger files are possible on Linux.
For a detailed overview about LFS in Linux, have a look at Andreas Jaeger's Large File Support in Linux page at http://www.suse.de/~aj/linux_lfs.html.
If you do encounter a full-table error, there are several reasons why it might have occurred:
The disk might be full.
InnoDB storage engine maintains
InnoDB tables within a tablespace that
can be created from several files. This enables a table to
exceed the maximum individual file size. The tablespace can
include raw disk partitions, which permits extremely large
tables. The maximum tablespace size is 64TB.
If you are using
InnoDB tables and run
out of room in the
InnoDB tablespace. In
this case, the solution is to extend the
InnoDB tablespace. See
Section 14.7.2, “Changing the Number or Size of InnoDB Log Files”.
You are using
MyISAM tables on an
operating system that supports files only up to 2GB in size
and you have hit this limit for the data file or index file.
You are using a
MyISAM table and the
space required for the table exceeds what is permitted by
the internal pointer size.
data and index files to grow up to 256TB by default, but
this limit can be changed up to the maximum permissible size
of 65,536TB (2567 − 1
If you need a
MyISAM table that is larger
than the default limit and your operating system supports
large files, the
MAX_ROWS options. See
Section 13.1.17, “CREATE TABLE Syntax”. The server uses these
options to determine how large a table to permit.
To change the default size limit for
MyISAM tables, set the
which sets the number of bytes used for internal row
pointers. The value is used to set the pointer size for new
tables if you do not specify the
option. The value of
can be from 2 to 7. A value of 4 permits tables up to 4GB; a
value of 6 permits tables up to 256TB.
You can check the maximum data and index sizes by using this statement:
SHOW TABLE STATUS FROM
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 includes a
MERGE library that
enables you to handle a collection of
MyISAM tables that have identical
structure as a single
See Section 15.8, “The MERGE Storage Engine”.
You are using the
engine, in which case you need to increase the values for
IndexMemory configuration parameters in
config.ini file. See
Section 126.96.36.199, “MySQL Cluster Data Node Configuration Parameters”.