当我尝试在特定数据库中重新创建特定表时,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;我收到一个错误。我使用不同的名称创建另一个数据库,并按照相同的步骤;这次没有问题。
答案 0 :(得分:1)
它似乎与this MySQL bug相同。
程序中的程序远远落在我的评论中,即
此后事情似乎正常;我现在可以删除数据库并完全恢复,没有任何问题。