Mysql 1114(HY000):桌子已经满了
我试图通过一个简单的查询将一行添加到Mysql 1114(HY000):桌子已经满了,mysql,innodb,Mysql,Innodb,我试图通过一个简单的查询将一行添加到InnoDB表中: INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills'); 但当我尝试此查询时,我得到以下结果: 错误1114(HY000):表zip\u code已满 做一个 SELECT COUNT(*) FROM zip_codes 给我188959行,考虑到同一数据库中有另一个包含810635行的表,这似乎不太多 我对InnoDB引擎相当缺乏经验,也从未在M
InnoDB
表中:
INSERT INTO zip_codes (zip_code, city) VALUES ('90210', 'Beverly Hills');
但当我尝试此查询时,我得到以下结果:
错误1114(HY000):表zip\u code
已满
做一个
SELECT COUNT(*) FROM zip_codes
给我188959行,考虑到同一数据库中有另一个包含810635行的表,这似乎不太多
我对InnoDB引擎
相当缺乏经验,也从未在MyISAM
中遇到过这个问题。这里有哪些潜在的问题
编辑:这仅在向
邮政编码表添加行时发生。引用MySQL文档
InnoDB存储引擎在可以从多个文件创建的表空间中维护InnoDB表。这允许表超过单个文件的最大大小。表空间可以包括原始磁盘分区,这允许非常大的表。最大表空间大小为64TB
如果您正在使用InnoDB表,并且InnoDB表空间的空间不足。在这种情况下,解决方案是扩展InnoDB表空间。请参阅第13.2.5节,[“添加、删除或调整InnoDB数据和日志文件的大小”。]
编辑:在解析为与配置相关的解析之前,如果磁盘空间没有用完,请首先检查
在本例中,您的my.cnf
中的innodb\u data\u文件路径的最大大小似乎太小
innodb_data_file_path = ibdata1:10M:autoextend:max:512M
所有innodb表中的数据总和不能超过512MB
也许您应该使用innodb\u file\u per\u table
切换到innodb per table方案,除非启用innodb\u file\u per\u table
选项,innodb
将所有数据保存在一个文件中,通常称为ibdata1
检查该文件的大小,并检查其所在的驱动器中是否有足够的磁盘空间。这也可能是InnoDB对打开事务数的限制:
在1024个事务中,已撤消
记录(如中所述,编辑任何数据),
InnoDB将无法工作
您需要修改在my.cnf中为INNO_DB表设置的限制上限。此内存限制不是为单个表设置的,而是为所有合并的表设置的
如果希望内存自动扩展到512MB
innodb_data_file_path = ibdata1:10M:autoextend:max:512M
如果您不知道限制或不想设置限制上限,可以这样修改它
innodb_data_file_path = ibdata1:10M:autoextend
在我的例子中,这是因为承载ibdata1文件的分区已满。您还将得到相同的错误1114(HY000):表“#sql-310a_8867d7f”已满
如果您试图向使用存储引擎内存的表添加索引。另一个可能的原因是分区已满-这正是我现在遇到的情况。如果tmpdir
所在的分区已满,也会出现此错误(由于alter table或其他的原因,如果使用NDBCLUSTER作为存储引擎,则应增加数据内存
和索引内存
)
存储mysql表的分区(通常为/var/lib/mysql)或存储临时表的分区(通常为/tmp)中的空间可能会不足
您可能希望:-在创建索引期间监视您的可用空间。-将tmpdir MySQL变量指向其他位置。这需要重新启动服务器。我们有:SQLSTATE[HY000]:一般错误:1114表“catalog\u product\u index\u price\u bundle\u sel\u tmp”已满
解决者:
编辑数据库的配置:
nano/etc/my.cnf
tmp_表_尺寸=256M
最大堆表尺寸=256M
- 重新启动数据库
在我的情况下,服务器内存已满,因此数据库无法写入临时数据。
要解决这个问题,你只需要在你的硬盘上腾出一些地方。在CentOS 7上,只需停止并启动MySQL服务,我就可以解决这个问题
sudo服务mysql停止
sudo service mysql start
导入8GB sql数据库文件时,我也遇到了这个错误。检查了我的mysql安装驱动器。驱动器中没有剩余空间。因此,通过删除不需要的项目获得了一些空间,并重新运行了数据库导入命令。这次成功。我遇到了一些问题同样的问题是因为磁盘空间不足。托管IDBDA1文件的分区是IDANDB基础结构的系统表空间。 < P>我遇到了这个问题……在我的情况下,我的专用服务器上的内存用完了。数据或文件。我通过增加数据库所在的虚拟机的可用内存量解决了这个问题。在我的情况下,我试图运行alter table命令,可用磁盘空间小于表的大小。一旦我增加了磁盘空间,问题就消失了。在我的情况下,这只是因为se mysql服务器与一个应用程序一起运行,该应用程序写入的日志太多,说明磁盘已满
您可以检查磁盘是否有足够的空间使用
df -h
如果磁盘使用率为100%,则可以使用此命令查找哪个目录太大
du -h -d 1 /
DOCKER用户:当您达到DOCKER映像大小限制的90%左右(似乎缓存需要10%左右)时,也会发生这种情况。这一措辞令人困惑,因为这仅仅意味着DOCKER基本上可以用于所有事情的磁盘空间量
要修复此问题,请转到Docker桌面设置>磁盘>向右移动滑块>应用
对于那些在尝试增加各种内存限制时仍然存在问题的人来说,这个磁盘在/var/www/mysql上已经满了:通过设置internal\u tmp\u mem\u storage\u engine=memory
为我解决了这个问题
我使用的是Ubuntu 20.04.2,使用的是MySQL 8.0.25-0ubuntu0.20.04.1。在尝试插入时是否会出现错误