133

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

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

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

ERROR 1114 (HY000): 表zip_codes已满

做一个

SELECT COUNT(*) FROM zip_codes

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

我对这个问题相当缺乏经验,InnoDB engine也从未遇到过这个问题MyISAM。这里有哪些潜在问题?

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

4

23 回答 23

107

编辑:首先检查,如果您没有用完磁盘空间,然后再解决与配置相关的解决方案。

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

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

你不能在所有 innodb 表中托管超过 512MB 的数据。

也许您应该使用innodb_file_per_table.

于 2009-04-08T15:45:35.893 回答
91

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

于 2011-05-28T15:24:25.347 回答
27

您还将收到相同的错误 ERROR 1114 (HY000): The table '#sql-310a_8867d7f' is full

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

于 2010-05-19T17:42:24.037 回答
27

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

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

在此处输入图像描述

于 2019-06-09T23:17:13.957 回答
25

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

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

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

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

innodb_data_file_path = ibdata1:10M:autoextend
于 2010-03-10T16:01:59.087 回答
13

如果tmpdir驻留的分区已满(由于更改表或其他

于 2011-11-01T17:15:16.227 回答
11

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

于 2010-04-28T16:57:17.310 回答
10

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

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

于 2012-06-21T16:58:31.153 回答
8

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

于 2016-08-24T05:27:40.647 回答
7

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

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

于 2009-04-08T15:48:03.593 回答
7

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

Mysql 常见问题解答

于 2011-12-21T14:13:15.390 回答
7

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

通过以下方式解决:

编辑数据库的配置:

纳米 /etc/my.cnf

tmp_table_size=256M max_heap_table_size=256M

  • 重启数据库
于 2015-01-07T23:00:40.263 回答
6

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

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

df -h

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

du -h -d 1 /
于 2019-01-11T09:44:47.417 回答
4

引用 MySQL 文档。

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

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

于 2009-04-08T15:45:10.120 回答
3

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

我在 Ubuntu 20.04.2 上,使用 MySQL 8.0.25-0ubuntu0.20.04.1。

于 2021-06-17T12:33:38.007 回答
2

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

sudo service mysql stop

sudo service mysql start

于 2016-01-26T13:11:58.890 回答
2

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

于 2016-12-07T20:00:09.070 回答
2

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

于 2017-07-25T13:32:05.373 回答
2

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

于 2018-12-30T04:32:10.223 回答
2

此磁盘在 /var/www/mysql 已满

于 2019-11-27T06:48:54.673 回答
1

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

于 2016-01-05T18:59:23.127 回答
1

我通过增加数据库所在的 vagrant VM 的可用内存量来解决这个问题。

于 2018-11-28T15:12:09.327 回答
-1

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

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

在 1024 个事务中,具有撤消记录(如编辑任何数据),InnoDB 将无法工作

于 2010-01-29T13:42:59.163 回答