当我尝试在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)
答案 0 :(得分:0)
这是一个老问题,但我今天刚拿到这个问题,并找到了解决方案(并且错误的是errno = -1)。
我们的表是InnoDB,每隔几个小时创建和销毁一次。 我们最近启动了一个奴隶服务器跟随那个主人。 我们还使用" innodb_file_per_table"选项。
错误仅发生在从站上,而不是在主站上。 问题是我们最近几小时前使用rsync将该从站同步到主站。
Rsync复制了表文件,但随后被主服务器删除,因为它是一个临时表。 因此,.idb文件存在于从属服务器中,但不再存在于主服务器中。
当主服务器发送创建表的请求时,从服务器无法将文件存在。 MySQL没有意识到存在一个表,因为元数据说没有表存在。 我假设MySQL正在尝试创建该文件,但由于它在那里失败了。
在我的情况下,解决方案是删除另一个文件夹中的.idb文件(当然首先使用备份副本)。
然后,数据库然后允许我们创建表,然后奴隶将再次跟随主人
更好的方法是使用--delete选项来删除从主服务器中消失的任何陈旧文件。
无论如何 - 你可能没有我所描述的那种确切情况,但它可能只是一个陈旧的文件,因为某种原因离开那里。