从转储恢复 MySQL 数据库时创建表时出现错误代码 1005(errno:121)

从转储恢复 MySQL 数据库时创建表时出现错误代码 1005(errno:121)

我有一台 Linux 生产机器和一台 Win7 64 位开发机器。我的工作流程包括在 Linux 机器上转储生产 MySQL 数据库,然后在 Windows 机器上的本地 MySQL 数据库中恢复它(使用 SQLyog)。这在很长一段时间内都运行良好。

遇到一些麻烦后,我格式化并重新安装了 Windows 开发机。从那时起,我无法恢复其上的数据库。我不断收到以下错误:

Query:
CREATE TABLE `auth_group` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(80) collate utf8_unicode_ci NOT NULL,
  PRIMARY KEY  (`id`),
  UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci

Error occured at:2010-06-26 17:16:14
Line no.:30
Error Code: 1005 - Can't create table 'ap_site.auth_group' (errno: 121)

请注意,这是 SQL 转储文件中第一个创建表语句。

此错误在 MySQL Community Server 5.1.41 和 5.1.48 以及 SQLyog Community 8.0.4 和 8.5.1 上均有发生。我真的不知道重新安装之前和现在的配置有何不同,以及为什么会产生这种影响。

我需要继续从 sql dump 中恢复,所以我需要一个永久性的修复,而不是一个量身定制的解决方法。

答案1

您收到的错误意味着:

MySQL error code 121: Duplicate key on write or update

您的键/约束名称在整个数据库中必须是唯一的。

要解决该问题,请为与现有密钥同名的密钥选择不同的名称,或者重命名现有密钥。

答案2

看完之后很多关于此错误的线程,主要是关于外键在整个数据库中应该唯一命名的限制,以下简单的解决方案有效:

删除数据库,重新创建并重试:)

相关内容