At XTIVIA, we have encountered the MySQL Error 1114, “table is full” on quite a few occasions. The description for the error is usually misleading as it implies that a table has reached or exceeded a maximum set limitation. Tables utilizing the InnoDB storage engine do have inherent maximums although in these cases, the 64TB limit for InnoDB tables with InnoDB page sizes of 16KB was not the issue.
It is possible to impose user-defined maximums by explicitly defining the variable innodb_data_file_path. For example setting it to a value of ibdata1:10M:autoextend:max:256M will limit the data in InnoDB tables to a total of 256MB. Removing the max:256MB term will eliminate the imposed maximum.
In most cases, ERROR 1114 results from lack of disk space. If a partition, disk, or LUN has been exhausted of all space and MySQL attempts to insert data into the table, it will fail with Error 1114.
One example where this error was encountered was during a backup on a large database. Although there was plenty of disk space available on the partition, as mysqldump began backing up one particularly large table, it sent hundreds of thousands of errors reporting that the table was full. Again, the table was not full as no limits were set and the table was not near the 64TB maximum. The problem was that as mysqldump ran, it was creating a large file on the same partition where the data existed thereby doubling the size required for the table.
Adding more disk space was not an option under the time crunch and the maintenance window available for the client. The issue was resolved by running mysqldump on the table in increments. By adding a “–where” option in the mysqldump command, the backup was run stepwise on smaller chunks of data enabling the backup file and data files to exist in the same partition without running out of space. Given the autoincrement primary key and total number of rows, the table was divided into ten groups by rows to dump separately. Each ran successfully, the errors halted and a successful backup was therefore performed on the entire database.
Summary
MySQL reports a “Table is full” error where, in most cases, the issue involves running out of disk space. By default, limits are not imposed on MySQL tables however there are relatively large maximums inherent to the database and those maximums have not been the issue in our experience. If you are seeing this error, first check the disk space on the partition to ensure that this is not the cause of the error. If disk space is not a concern, check the variable innodb_data_file_path to see if a maximum table size has been set explicitly.