2009-04-08 23 views
69

我想添加一行到一个InnoDB表有一个简单的查询:ERROR 1114(HY000):表满

INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills'); 

但是,当我尝试此查询,我得到如下:

ERROR 1114 (HY000): The table `zip_codes` is full 

做一个“SELECT COUNT(*)FROM zip_codes”给了我188,959行,这看起来不像太多,考虑到我在同一个数据库中有810,635行的另一个表。

我对InnoDB引擎相当缺乏经验,从未遇到过MyISAM的这个问题。这里有什么潜在的问题?

编辑:只有在向zip_codes表添加一行时才会发生这种情况。

+0

当您试图插入任何表或只有zip_codes时会发生错误吗? – 2009-04-08 15:44:24

回答

64

编辑:首先检查,如果你没有解决的配置有关决议之前运行的磁盘空间。

你似乎在你的my.cnf有过低的最大尺寸为您innodb_data_file_path,在这个例子中

innodb_data_file_path = ibdata1:10M:autoextend:max:512M 

你不能承载超过所有InnoDB表组合数据的512MB。

也许你应该改用使用innodb_file_per_table的innodb-per-table方案。

+0

C在这里我们得到这个my.cnf文件在Ubuntu中 – 2017-06-16 07:42:58

+2

@Nadh在Ubuntu 16.04它是`/ etc/mysql /`的一部分,并部分分割成`/ etc/mysql/conf.d`中的其他文件。 – 2017-06-17 22:01:00

2

引用MySQL文档。

The InnoDB storage engine maintains InnoDB tables within a tablespace that can be created from several files. This allows a table to exceed the maximum individual file size. The tablespace can include raw disk partitions, which allows 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 13.2.5, [“Adding, Removing, or Resizing InnoDB Data and Log Files”.]

5

除非您已启用innodb_file_per_table选项,InnoDB保持所有的数据在一个文件中,通常被称为ibdata1

检查该文件的大小,并检查它所在的驱动器中是否有足够的磁盘空间。

0

这也可能是打开的事务的数量限制的InnoDB:

http://bugs.mysql.com/bug.php?id=26590

at 1024 transactions, that have undo records (as in, edited any data), InnoDB will fail to work

14

您需要修改限制盖在my.cnf为INNO_DB表设置。此内存限制未针对单个表格进行设置,它针对所有组合的表格进行设置。

如果你想在内存为自动扩到512MB

innodb_data_file_path = ibdata1:10M:autoextend:max:512M 

如果你不知道的限制或不希望把一个限制上限,您可以修改它像这样

innodb_data_file_path = ibdata1:10M:autoextend 
+0

我们主办了我们的ddbb在亚马逊上,它配置了autoextend。但是我们遇到了同样的问题,我认为这是由于达到配置的存储限制 – borjab 2016-11-04 09:03:31

8

就我而言,这是因为托管ibdata1文件的分区已满。

22

您也将获得同样的错误ERROR 1114(HY000):表“#SQL-310a_8867d7f”充满

,如果你尝试将索引添加到正在使用的存储引擎MEMORY表。

68

另一个可能的原因是分区已满 - 这正是我现在发生的事情。

+1

这应该始终是首先要检查的问题。总是回到电源线,我已经偶然发现了很多次。 – 2017-03-09 15:08:10

9

如果上tmpdir所在的分区填满了(由于ALTER TABLE或其他

7

如果使用NDBCLUSTER作为存储引擎,你应该增加DataMemoryIndexMemory也会出现此错误。

Mysql FQA

8

在存储mysql表的分区(通常是/ var/lib/mysql)或临时表的存储位置(通常为/ tmp)中,可能会出现空间不足的情况。

您可能想要: - 在创建索引期间监控您的可用空间。 - 将tmpdir MySQL变量指向不同的位置。这需要重新启动服务器。

3

我们曾:SQLSTATE [HY000]:常规错误:1114表 'catalog_product_index_price_bundle_sel_tmp' 充满

要解决:

纳米的/etc/my.cnf:分贝

编辑配置

tmp_table_size的= 256M max_heap_table_size = 256M

  • restart db
1

在我的情况下,服务器内存已满,因此数据库无法写入临时数据。 要解决它,你只需要在驱动器上做一些地方。

0

在CentOS 7上,停止并启动MySQL服务为我解决了这个问题。

sudo service mysql stop

sudo service mysql start

6

在导入8GB SQL数据库文件我也遇到这个错误。检查我的MySQL安装驱动器。 驱动器中没有剩余空间。因此通过删除不需要的项目获得了一些空间并重新运行了我的数据库导入命令。 这次它成功了。

1

由于磁盘空间不足,我面临同样的问题。而承载ibdata1文件(这是InnoDB基础架构的系统表空间)的分区已满。

1

我遇到了这个问题......在我的情况下,我的专用服务器上的存储空间用完了。检查一切是否失败,并考虑增加磁盘空间或删除不需要的数据或文件。