Databases work as the storage for many Web applications. Maintaining these applications involve frequent export or import of data. Unfortunately, SQL server can report errors during this import/export process.
One such error is “error 1114 (hy000): the table is full.“ The exact reason for the error can be disk space shortage or wrong database server settings.
At Bobcares, we often get requests from customers to fix database errors as part of our Outsourced Technical Support Services.
Today, we’ll see the causes for “error 1114 (hy000): the table is full” and how our Support Engineers fix them.
Where do we see table full error?
Firstly, let’s take a look at the typical scenarios where we see the error “1114 (hy000): the table is full”.
This error primarily happens in the process of exporting and importing sql files into databases. It can be either via utilities like phpMyAdmin or even via command line.
Recently, a customer reported this error when he was trying to import a database via phpMyAdmin. The error said:
ERROR 1114 (HY000) at line 12345: The table 'abc' is full.
Surprisingly, the table it was complaining about was empty and contained no rows. Therefore, the natural question comes:
Why then table full error?
[Do you know that proactive server management can reduce MySQL errors drastically? Just signup with us and we’ll take care of your servers 24×7]
What causes “error 1114 (hy000): the table is full”?
Usually, the description for the error is often misleading as it says database table being full. But, the actual reason for the error may vary.
Let’s now see the typical causes for the error “1114 (hy000): the table is full.”
1. Disk Full
From our experience in managing databases, our Dedicated Engineers often see the table full error due to disk full issues. If a server partition or disk has used up all the space and MySQL still attempts to insert data into the table, it will fail with error 1114.
Similarly, this error can also happen during backup of large databases too. Here, the backup process create large files and can cause space constraints in the disk. Backup file along with original database will result in doubling the size required for the table.
2. innodb_data_file_path limits
When the disk space of the server is all okay, and still you get error 1114 (hy000): the table is full, it means the problem will be with the Database server configuration settings.
For instance, on a database server with storage engine set as InnoDB , the parameter innodb_data_file_path often cause this error.
When the innodb_data_file_path in the my.cnf file is set as per the entry below, the ibdata1 file can grow only up to a maximum size of 512M.
innodb_data_file_path = ibdata1:10M:autoextend:max:512M
And, when the file size grows over this limit, it ends up in the error 1114 (hy000): the table is full.
[Are you getting error 1114 (hy000): the table is full? Leave it for us, we are here to help you.]
How to fix “error 1114 (hy000): the table is full”?
So far, we saw the possible reasons for the error 1114. Now, let’s take a look on how our Dedicated Engineers resolve this and make database server working.
1. Fix disk space
First and foremost, we check the disk usage of the server using the command:
df -h
This would show up the disk that contains the least free space. Lack of free space on the disks can even stop the MySQL server. That’s why, our Support Engineers quickly try to clear out some disk space by removing unwanted backup files, log files and so on.
Additionally, to avoid problems with database restore, we always ensure enough free space in the partition that holds MySQL data directory. This applies to the /tmp partition too where MySQL store the temporary files.
2. Fix SQL server settings
Further, we fix the Database server settings. This involves setting the right value for the MySQL variables in the configuration file at /etc/my.cnf.
For instance, our Dedicated Engineers often do not put a maximum limit cap for ibdata1 file by adding the following entry in MySQL configuration.
innodb_data_file_path = ibdata1:10M:autoextend
Similarly, we do an analysis of the MySQL database usage and set the tmp_table_size, max_heap_table_size in the my.cnf file.
3. Recreating indexes
Indexes in databases helps SQL server to find the exact row or rows associated with the key values quickly and efficiently. Again, from our experience, when importing databases via phpmyAdmin, recreating the indexes at a different point can solve the table full error.
Conclusion
In short, error 1114 (hy000): the table is full happens mainly due to server running out of disk space or wrong MySQL configuration limits. Today, we saw the top causes for the error and how our Support Engineers solve them in live servers.
PREVENT YOUR SERVER FROM CRASHING!
Never again lose customers to poor server speed! Let us help you.
Our server experts will monitor & maintain your server 24/7 so that it remains lightning fast and secure.
GET STARTED
var google_conversion_label = «owonCMyG5nEQ0aD71QM»;
The MySQL ERROR 1114
can be triggered when you try to perform an INSERT
statement on a table.
The following example shows how the error happens when I try to insert data into the users
table:
mysql> INSERT INTO `users` VALUES (15, "Nathan", "Sebhastian")
ERROR 1114 (HY000): The table users is full
To fix this error, you need to first check the disk space in where your MySQL server is installed and see if the partition is really full.
You can do so by running the df -h
command from the Terminal. Here’s an example partitions listed from my server:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/vda1 200G 67G 134G 34% /
tmpfs 16G 34M 16G 1% /dev/shm
/dev/vdb1 800G 446G 354G 56% /tmp
tmpfs 16G 1.6G 15G 11% /run/dbus
If you see any disk on the list with the Use%
value reaching around 90%
, then you need to check if your mysql
is installed on that disk.
Most likely you will have mysql
located in /var/www/mysql
directory, so you need to make sure the main mounted partition at /
has the Use%
lower than 80%
.
But if you’re Use%
values are low like in the example above, then the error is not caused by the disk partition.
You need to check on your MySQL configuration file next.
Fix MySQL table is full error from the configuration file
You need to open your MySQL config file and look at the configuration for innodb_data_file_path
.
The default value may be as follows:
innodb_data_file_path = ibdata1:12M:autoextend:max:256M
The values of innodb_data_file_path
option above will create an ibdata1
directory that stores all critical information for your InnoDB
-based tables.
The maximum size of data you can store in your InnoDB
tables are 256MB
as shown in the autoextend:max:256M
in the option above.
To resolve the MySQL table is full issue, try increasing the size of your autoextend
parameter to 512M
like this:
innodb_data_file_path = ibdata1:12M:autoextend:max:512M
Alternatively, you can also just write autoextend
without specifying the maximum size to allow InnoDB
tables to grow until the disk size is full:
innodb_data_file_path = ibdata1:12M:autoextend
Once done, save your configuration file and restart your MySQL server:
sudo service mysql stop
sudo service mysql start
Try to connect and insert the data into your database table again. It should work this time.
If you’re using the MyISAM
engine for your tables, then MySQL permits each MyISAM
table to grow up to 256TB
by default.
The MyISAM
engine limit can still be increased up to 65,536TB
if you need to. Check out the official MySQL documentation on table size limits on how to do that.
Good luck resolving the issue! 👍
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.