我有一个特定的表,我无法为其添加键:
mysql> ALTER TABLE tasks ADD KEY `fruitful_user_count` (`user_id`, `is_fruitful`);
ERROR 1034 (HY000): Incorrect key file for table 'tasks'; try to repair it
谷歌搜索这个问题似乎这个问题通常是配置问题或磁盘空间问题。事实上,这个数据库运行在一个Amazon RDS实例上,这意味着它基本上是一个专用于 MySQL 的托管服务器,具有非常标准的配置。此外,分配给我们的磁盘只有大约 25% 已满。
考虑到虚拟机上的磁盘(我相信由 Xen 提供支持)可能已满,而不是我分配的磁盘空间甚至可能不在同一个房间(网络存储),我重新启动了 RDS 实例,希望我能得到另一个 VM 上的新实例。然而,这并没有帮助。
我的下一个故障排除步骤应该是什么?
这是表格:
mysql> show create table tasks;
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| tasks | CREATE TABLE `tasks` (
`user_id` char(32) NOT NULL,
`module_id` int(11) NOT NULL DEFAULT '0',
`is_successful` tinyint(1) DEFAULT NULL,
`is_fruitful` tinyint(1) DEFAULT NULL,
`last_run` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`last_pulled` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`user_id`,`module_id`),
KEY `phone_scrapes_user` (`user_id`),
KEY `phone_scrapes_module` (`module_id`),
KEY `urgency` (`last_pulled`,`last_run`),
KEY `successful_user_count` (`user_id`,`is_successful`),
KEY `is_successful` (`is_successful`),
KEY `fruitness` (`is_fruitful`,`is_successful`),
CONSTRAINT `tasks_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`),
CONSTRAINT `tasks_ibfk_2` FOREIGN KEY (`module_id`) REFERENCES `modules` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |
+-------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
尝试修复表:
建议的解决方案:
REPAIR TABLE table_name;
cnf
文件中的临时目录更改为具有更大空间的新位置;当我们在 innodb 上做 Alter 时,需要观察“tmpdir”。Erro 1034 : Key repair 肯定是因为“tmpdir”已满,你的 alter 会抛出错误。因此,我建议在触发 Alter 时多关注您的“tmpdir”利用率。如果 tmp 正在使用 100%,那么您肯定会看到此错误 :)。