mysql - 当尝试更改表时,我收到 "The table ' some table' is full”。为什么?

标签 mysql sql configuration shared-memory

我的 mysql 5.6 服务器(社区版)在 debian 上遇到一些问题。

我有一张表,大约 4.5 GB。当我尝试更改此表以添加一列(默认值为 0 的 TINYINT)时,会发生错误 1114,如下所示:

ERROR 1114 (HY000): The table 'some table' is full

我已阅读此(和其他)问题,但找不到适合我的情况的答案 ERROR 1114 (HY000): The table is full

我启用了 innodb_file_per_table 参数。 我的硬盘上还有大约 50GB 的可用空间,用于存放 mysql 数据和 tmp 目录。

向该表插入新数据效果很好,但更改它却不起作用。

我的 MySQL 目录与整个系统位于同一磁盘上。 MySQL 的 tmpdir 位于 /dev/shm 中。这个目录可以以某种方式限制 mysql 进程吗?

最佳答案

MySQL 极不可能在共享内存中的临时目录下正常运行。无论如何,这都是对共享内存这一昂贵资源的极大浪费。

当您尝试ALTER表时,MySQL 使用临时目录来创建表的副本。您必须这样做才能添加列。但是 /dev/shm tempdir 不可能大于系统上的 RAM。所以你的表不适合临时目录。因此,MySQL 抗议您的表已“满”——这意味着它太大了。

按照本文中的说明进行操作,并将数据库守护程序的临时目录放在有大量空间的硬盘上。

ERROR 1114 (HY000): The table 'XXX' is full

关于mysql - 当尝试更改表时,我收到 "The table ' some table' is full”。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24509819/

相关文章:

mysql - 使用 MYSQL 创建存储过程时遇到问题

MySQL检查两个日期范围是否与输入重叠

不使用bands的Java文档生成工具

sql - 如何从 SQL 中的两个表创建矩阵?

linux - 我可以使用 puppet 停止 Linux 服务器上的服务吗?

java - 我的操作类在没有 Struts.xml 映射或 java 注释的情况下被映射

mysql - 在 MySQL 中使用零日期 '0000-00-00 00:00:00' 或 NULL 更好吗?

php - MySQL 查询 : does LIMIT put a cap on both entries before NOW() and after NOW()

php - 如何获得 my_hit count 和 more_info 的 SUM

python - 如何正确管理应用程序配置