1114(HY000):桌子已满


114

我正在尝试InnoDB通过简单的查询将行添加到表中:

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

但是,当我尝试此查询时,得到以下信息:

错误1114(HY000):表zip_codes已满

做一个

SELECT COUNT(*) FROM zip_codes

给了我188,959行,考虑到我在同一数据库中有另一个具有810,635行的表,这似乎不算太多。

我对的经验不足,InnoDB engine并且从未遇到过这个问题MyISAM。这里有哪些潜在问题?

编辑:这仅在向zip_codes表中添加一行时发生。


当您尝试插入任何表或仅插入zip_codes时,会发生错误吗?
乍得伯奇

Answers:


92

编辑:在解决与配置有关的分辨率之前,请先检查是否没有用完磁盘空间。

在此示例中innodb_data_file_path,您的最大尺寸似乎太小my.cnf

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

您在所有innodb表组合中所承载的数据不能超过512MB。

也许您应该使用切换到每表一个innodb方案innodb_file_per_table


C我们在ubuntu中获得此my.cnf文件的位置

3
@Nadh在Ubuntu的16.04它的组成部分/etc/mysql/和部分地分裂成其他文件中/etc/mysql/conf.d
马丁C.

在将innodb_data_file_path线路添加到/etc/mysql/mysql.conf.d/mysqld.cnf并重新启动mysqland apache2 服务之后,我的工作了
Timmah

81

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


1
这应该始终是检查的第一件事。总是回到电源线,我无数次跌跌撞撞。
史蒂文·丘奇

1
您节省了我几个小时来尝试更改mysql配置。主分区已满。必须将mysql数据库移动到数据分区,然后创建一个软链接
Ganesh Krishnan

2
使用df -h了检查磁盘大小
阿米特·贝拉

25

您还将收到相同的错误ERROR 1114(HY000):表'#sql-310a_8867d7f'已满

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


这发生在我身上,但似乎我的客户使用了错误的语法。当使用简单的方法添加相同的索引时,ALTER TABLE my_table ADD INDEX my_index (column_a, column_b);它可以工作。
thephper

22

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

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

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

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

innodb_data_file_path = ibdata1:10M:autoextend

我们将ddbb托管在Amazon上,并使用autoextend配置了它。但是我们也遇到了同样的问题,我认为是由于达到了配置的存储限制
borjab

12

如果tmpdir驻留的分区已满(由于更改表或其他原因),也会出现此错误


11

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


10

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

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


8

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



6

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

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


5

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

解决方法:

编辑数据库的配置:

纳米/etc/my.cnf

tmp_table_size = 256M max_heap_table_size = 256M

  • 重新启动数据库

1
那些512M设置很危险。它们控制复杂选择中临时表的最大内存大小。它不仅是“每个连接”,而且是“每个tmp表”。因此,这些值很容易导致RAM不足。
瑞克·詹姆斯

4

引用MySQL文档。

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

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


4

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

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

df -h

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

du -h -d 1 /

4

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

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

在此处输入图片说明


2

在CentOS 7上,只需停止和启动MySQL服务即可解决此问题。

sudo service mysql stop

sudo service mysql start


奇怪的是,这对我也起作用。...没有任何大于80%已满的分区,只是重新启动即可解决。
n0nag0n


2

我遇到了这个问题...就我而言,我的专用服务器上的存储空间已用完。检查是否所有其他操作都失败,并考虑增加磁盘空间或删除不需要的数据或文件。


1

在我的情况下,服务器内存已满,因此DB无法写入临时数据。要解决此问题,您只需在驱动器上放置一些位置即可。


1

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


1

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



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.