为什么我的InnoDB表的大小限制为600MiB?

时间:2013-11-16 15:35:36

标签: mysql innodb

我在my.cnf中有以下InnoDB配置选项:

innodb_file_per_table = 1

我正在填充一个包含几百万行的表,但在插入几分钟后,MySQL会产生以下错误:

ERROR 1114 (HY000): The table is full

.ibd文件大小正好是629145600字节(是的,600 * 2 ^ 20)。包含MySQL数据的分区未满。

有谁能解释这里发生了什么?

2 个答案:

答案 0 :(得分:1)

这不是InnoDB的限制 - 5.0和5.6状态的文档都是:

  

在某些较旧的操作系统上,文件必须小于2GB

在任何情况下都不是您遇到的限制。组合的日志文件也可以运行高达512 GB(对于5.6版,4GB和5.0)。其他东西似乎对你的文件设置了限制:虚拟化系统,分区(如Rahul所提到的)等等。

答案 1 :(得分:0)

当插入这些记录时,innoDB会创建大量临时文件(在my.cnf中由tmpdir指定的目录中)。对我来说,这被设置为/ tmp,我有大约500MiB的可用空间。增加此可用空间(大约1GiB)后,错误停止发生。

我通过在/ tmp上安装空间有限的tmpfs重复测试了这个。使用不同的大小范围,我能够在收到1114错误之前将.ibd文件的大小设置为大于600MiB。 600MiB是如此精确,很难想象它是巧合,但据我所知,它是。

我应该指出,在脚本中监视/ tmp没有显示任何使用它的指示 - df没有报告其大小接近满的情况。