ERROR 1114(HY000):桌子已满

Wic*_*wok 100 mysql innodb

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

INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills');
Run Code Online (Sandbox Code Playgroud)

但是当我尝试这个查询时,我得到以下内容:

SELECT COUNT(*) FROM zip_codes
Run Code Online (Sandbox Code Playgroud)

做一个"SELECT COUNT(*)FROM zip_codes"给了我188,959行,考虑到我在同一个数据库中有另一个810,635行的表,这似乎不太多.

我对InnoDB引擎缺乏经验,从未在MyISAM上遇到过这个问题.这里有哪些潜在的问题?

编辑:只有在zip_codes表中添加行时才会出现这种情况.

Mar*_* C. 86

编辑:首先检查,如果你没有用完磁盘空间,在解决配置相关的解决方案之前.

在这个例子中innodb_data_file_path,你的最大尺寸似乎太小了my.cnf

innodb_data_file_path = ibdata1:10M:autoextend:max:512M
Run Code Online (Sandbox Code Playgroud)

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

也许你应该改用一个innodb-per-table方案innodb_file_per_table.

  • @Nadh在Ubuntu 16.04中它是`/ etc/mysql /`的一部分,并且部分分成了`/ etc/mysql/conf.d`中的其他文件 (3认同)

maa*_*nus 78

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

  • 使用“df -h”检查磁盘大小 (3认同)

小智 25

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

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


Sli*_*liq 22

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

要修复,请转到您的 Docker 桌面设置 > 磁盘 > 向右移动滑块 > 应用。

在此处输入图片说明


cle*_*orn 17

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

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

innodb_data_file_path = ibdata1:10M:autoextend:max:512M
Run Code Online (Sandbox Code Playgroud)

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

innodb_data_file_path = ibdata1:10M:autoextend
Run Code Online (Sandbox Code Playgroud)


小智 12

如果tmpdir驻留的分区填满(由于alter table或其他),也会出现此错误


ski*_*ppy 11

在我的情况下,这是因为托管ibdata1文件的分区已满.


小智 10

您可能在存储mysql表的分区(通常是/ var/lib/mysql)或存储临时表的位置(通常为/ tmp)中空间不足.

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


met*_*dos 7

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

Mysql FQA


Aru*_*mar 7

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


Kai*_*Kai 7

就我而言,这只是因为 mysql 服务器与应用程序一起运行,该应用程序写入了太多日志,导致磁盘已满。

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

df -h
Run Code Online (Sandbox Code Playgroud)

如果磁盘使用百分比为100%,可以使用此命令查找哪个目录太大

du -h -d 1 /
Run Code Online (Sandbox Code Playgroud)


Qua*_*noi 6

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

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


小智 6

我们有:SQLSTATE[HY000]:一般错误:1114 表“catalog_product_index_price_bundle_sel_tmp”已满

解决了:

编辑数据库配置:

纳米 /etc/my.cnf

tmp_table_size=256M max_heap_table_size=256M

  • 重启数据库

  • 那些 512M 设置很危险。它们控制复杂选择中临时表的最大内存大小。它不仅是“每个连接”,也是“每个 tmp 表”。因此,这些值很容易导致您耗尽 RAM。 (2认同)

wuk*_*ong 5

该磁盘已满,位于 /var/www/mysql