当我试图在MySQL服务器中创建表时出现了错误,
ERROR 1005 (HY000): Can't create table 'bill_period' (errno: -1)
请注意,这与"ERROR 1005 (HY000):无法创建表(errno: 150)“不一样(注意错误号不同)。
即使是简单的create表也会因此错误而失败,而且没有设置外键,也不使用外键。还有大量的磁盘空间是免费的。
有什么想法吗?
为了调试的目的,我用一个新的表名进行了这个查询,而不是原来的那个表名,似乎第二个表没有问题,
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)
发布于 2017-12-25 08:22:36
这是一个老问题,但我今天刚得到这个问题,找到了一个解决方案(是的,errno = -1)。
我们的桌子是InnoDB,每隔几个小时就被创建和销毁一次。我们最近启动了一个从服务器来跟踪这个主服务器。我们还使用"innodb_file_per_table“选项。
错误只发生在从服务器上,而不发生在主服务器上。问题是,我们最近使用rsync在几个小时前将该从服务器同步到主服务器。
Rsync复制了表文件,但由于它是一个临时表,因此在此期间被主服务器删除。因此,.idb文件存在于从服务器中,而不再存在于主服务器中。
当主程序发送创建表的请求时,由于文件已经在那里,所以从服务器无法完成。MySQL不知道存在一个表,因为元数据说那里没有表。我假设MySQL试图创建该文件,但由于它在那里,所以失败了。
在我的例子中,解决方案是删除另一个文件夹中的.idb文件(当然,首先要有备份副本)。
然后,数据库将允许我们创建表,然后从服务器将再次跟踪主程序。
实现rsync的一个更好的方法是使用--delete选项来删除从主服务器上删除的所有陈旧文件。
无论如何,您可能没有我所描述的那样的确切情况,但它可能只是一个陈旧的文件,因为某种原因留在那里。
https://stackoverflow.com/questions/26352733
复制相似问题