MySQL“记得”删除了InnoDB表

时间:2010-10-30 06:17:02

标签: mysql innodb mysql-error-1005

当我尝试在特定数据库中重新创建特定表时,MySQL让我感到悲伤;我相信问题在于MySQL在某些地方有一些表的外键记录,并在我尝试重新创建表时不断尝试检查约束。

有问题的数据库用于测试环境,并通过转储prod DB,删除测试数据库,再次创建测试数据库,然后将prod数据库转储应用于新测试数据库来定期刷新。

然而昨晚我去做这个程序时突然遇到了MySQL的错误:121,这通常与一个错误的外键有关...如果我尝试使用不同的表定义,而没有指定一个键,我得到错误:150而不是。但是,只有当我尝试将转储应用于与旧数据库名称完全相同的新数据库时,才会出现这种情况。如果我创建一个与旧版本不同的数据库(仍在同一台服务器上)并应用转储,则没有问题。

事实上,即使在一个全新的数据库中,我甚至无法创建一个完全相同名称的表,而根本没有任何键。

此示例演示了问题

mysql> create database test_db;
Query OK, 1 row affected (0.01 sec)

mysql> connect test_db;
Connection id:    1590
Current database: test_db

mysql> create table client_feed_group(id int);
ERROR 1005 (HY000): Can't create table './test_db/client_feed_group.frm' (errno: 150)
mysql> create database new_db_name;
Query OK, 1 row affected (0.00 sec)

mysql> connect new_db_name;
Connection id:    1591
Current database: new_db_name

mysql> create table client_feed_group(id int);
Query OK, 0 rows affected (0.01 sec)

我已经删除了test_db数据库;这应该删除所有表和所有记录。然后我创建它,连接到它并尝试创建旧表client_feed_group;我收到一个错误。我使用不同的名称创建另一个数据库,并按照相同的步骤;这次没有问题。

1 个答案:

答案 0 :(得分:1)

它似乎与this MySQL bug相同。

程序中的程序远远落在我的评论中,即

  • 使用与旧模式相同的模式再次创建表,但使用MyISAM引擎
  • 使用ALTER TABLE将引擎更改为innodb

此后事情似乎正常;我现在可以删除数据库并完全恢复,没有任何问题。