我有一个 MySQL 数据库表,其中有 31,107,600 行。它使用 InnoDB。这是在 CentOS 7 系统上。
该表包含以下几列:
- ID
- 时间戳
- 苹果
- 数据
- 方向
- 站点 ID
我想创建一个索引,所以我运行以下命令:
ALTER TABLE MY_TABLE ADD INDEX idx_my_index (mac, site_id, timestamp);
大约需要 30 秒,然后给我这个:
ERROR 1114 (HY000): The table 'MY_TABLE' is full
我的 MySQL 使用默认值/var/lib/mysql
来存储其数据。目前,该文件夹所在的分区有 12GB 可用空间,而我的数据库大小只有 2.7GB,所以据我所知,它应该有足够的空间。
为什么我会看到这个错误?网上查了一下,可能是使用了临时表,并且命中了临时表大小的限制?会是这样吗?或者是其他东西?我如何确认这一点?
答案1
当 ALTER TABLE 语句运行时,使用 df 观察所有文件系统上的空间使用情况。查看另一个文件系统(尤其是小文件系统)上的空间是否正在快速减少,例如 tmpfs 上是否有 /tmp。