ERROR 1005(HY000):无法创建表“x”(错误号:-1)

时间:2014-10-14 04:38:05

标签: mysql

当我尝试在MySQL服务器中创建表时,我遇到错误,

ERROR 1005 (HY000): Can't create table 'bill_period' (errno: -1)

请注意这与" ERROR 1005(HY000)不同:无法创建表格(错误号码:150)" (注意错误号不同)。

即使是简单的create table也会因此错误而失败,并且未设置和使用外键。而且充足的磁盘空间是免费的。

有什么想法吗?

出于调试目的,我使用新表名完成了相同的查询,而不是原来的表,对于第二个,似乎没问题,

mysql> CREATE TABLE IF NOT EXISTS `bill_period` (   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,   `day` tinyint(2) unsigned NOT NULL,   PRIMARY KEY (`id`),   KEY `day` (`day`) );                

ERROR 1005 (HY000): Can't create table 'bill_period' (errno: -1)

mysql> CREATE TABLE IF NOT EXISTS `bill_period_1` (   `id` int(10) unsigned NOT NULL AUTO_INCREMENT,   `day` tinyint(2) unsigned NOT NULL,   PRIMARY KEY (`id`),   KEY `day` (`day`) );
Query OK, 0 rows affected (0.42 sec)

1 个答案:

答案 0 :(得分:0)

这是一个老问题,但我今天刚拿到这个问题,并找到了解决方案(并且错误的是errno = -1)。

我们的表是InnoDB,每隔几个小时创建和销毁一次。 我们最近启动了一个奴隶服务器跟随那个主人。 我们还使用" innodb_file_per_table"选项。

错误仅发生在从站上,而不是在主站上。 问题是我们最近几小时前使用rsync将该从站同步到主站。

Rsync复制了表文件,但随后被主服务器删除,因为它是一个临时表。 因此,.idb文件存在于从属服务器中,但不再存在于主服务器中。

当主服务器发送创建表的请求时,从服务器无法将文件存在。 MySQL没有意识到存在一个表,因为元数据说没有表存在。 我假设MySQL正在尝试创建该文件,但由于它在那里失败了。

在我的情况下,解决方案是删除另一个文件夹中的.idb文件(当然首先使用备份副本)。

然后,数据库然后允许我们创建表,然后奴隶将再次跟随主人

更好的方法是使用--delete选项来删除从主服务器中消失的任何陈旧文件。

无论如何 - 你可能没有我所描述的那种确切情况,但它可能只是一个陈旧的文件,因为某种原因离开那里。