ERROR 1114(HY000):桌子已满

时间:2009-04-08 15:40:26

标签: mysql innodb

我正在尝试使用简单查询向InnoDB表添加一行:

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表添加行时才会出现这种情况。

23 个答案:

答案 0 :(得分:79)

编辑:在解决与配置相关的解决方案之前,如果没有耗尽磁盘空间,请先进行检查。

innodb_data_file_pathmy.cnf的最大尺寸似乎太低,在此示例中

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

在所有innodb表中,你不能容纳超过512MB的数据。

也许您应该使用innodb_file_per_table切换到每桌一个innodb。

答案 1 :(得分:76)

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

答案 2 :(得分:24)

你也会得到同样的错误ERROR 1114(HY000):表'#sql-310a_8867d7f'已经满了

如果您尝试将索引添加到使用存储引擎MEMORY的表。

答案 3 :(得分:17)

您需要修改my.cnf中为INNO_DB表设置的限额上限。没有为单个表设置此内存限制,它是为所有组合表设置的。

如果您希望内存自动扩展到512MB

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

如果您不知道限制或不想设置限额上限,可以像这样修改

innodb_data_file_path = ibdata1:10M:autoextend

答案 4 :(得分:11)

如果tmpdir所在的分区填满(由于alter table或其他

),也会出现此错误

答案 5 :(得分:9)

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

答案 6 :(得分:9)

存储mysql表的分区(通常是/ var / lib / mysql)或存储临时表的地方(通常是/ tmp)可能会耗尽空间。

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

答案 7 :(得分:7)

如果您使用NDBCLUSTER作为存储引擎,则应增加DataMemoryIndexMemory

Mysql FQA

答案 8 :(得分:6)

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

答案 9 :(得分:5)

除非您启用了innodb_file_per_table选项,否则InnoDB会将所有数据保存在一个文件中,通常称为ibdata1

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

答案 10 :(得分:3)

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

解决方法:

编辑db的配置:

nano /etc/my.cnf

tmp_table_size的= 256M max_heap_table_size = 256M

  • restart db

答案 11 :(得分:2)

引用MySQL文档。

  

InnoDB存储引擎将InnoDB表维护在可以从多个文件创建的表空间中。这允许表超过单个文件的最大大小。表空间可以包括原始磁盘分区,它允许非常大的表。最大表空间大小为64TB。

     

如果您正在使用InnoDB表并且在InnoDB表空间中没有空间。在这种情况下,解决方案是扩展InnoDB表空间。请参见第13.2.5节“[添加,删除或调整InnoDB数据和日志文件的大小”。]

答案 12 :(得分:2)

在我的情况下,这仅仅是因为mysql服务器与一个应用程序一起运行,该应用程序写了太多日志,表明磁盘已满。

您可以检查磁盘是否有足够的空间使用

df -h

如果磁盘使用率是100%,则可以使用此命令查找哪个目录太大

du -h -d 1 /

答案 13 :(得分:1)

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

答案 14 :(得分:1)

由于磁盘空间不足,我遇到了同样的问题。托管ibdata1文件的分区是InnoDB基础设施的系统表空间已经满了。

答案 15 :(得分:1)

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

答案 16 :(得分:1)

DOCKER用户:当您达到 Docker映像大小限制的90%左右(缓存大约需要10%)时,也会发生这种情况。用语令人困惑,因为这仅表示Docker基本上可用于所有内容的磁盘空间量。

要解决此问题,请转到Docker桌面设置>磁盘>将滑块向右移动更多>应用。

enter image description here

答案 17 :(得分:0)

在CentOS 7上,只需停止并启动MySQL服务就可以解决这个问题。

sudo service mysql stop

sudo service mysql start

答案 18 :(得分:0)

我通过增加数据库所在的无处不在的VM可用的内存量来解决此问题。

答案 19 :(得分:0)

就我而言,我试图运行alter table命令,并且可用磁盘空间小于表的大小。一次,我增加了磁盘空间,问题就消失了。

答案 20 :(得分:0)

该磁盘在/ var / www / mysql中已满

答案 21 :(得分:0)

对于那些在尝试增加各种内存限制时问题仍然存在的人:通过设置 internal_tmp_mem_storage_engine=MEMORY 为我解决了问题。

我使用的是 Ubuntu 20.04.2,使用 MySQL 8.0.25-0ubuntu0.20.04.1。

答案 22 :(得分:-1)

这也可能是InnoDB对开放交易数量的限制:

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

  

在1024个交易中,有撤消   记录(如编辑任何数据),   InnoDB无法正常工作