![从转储恢复 MySQL 数据库时创建表时出现错误代码 1005(errno:121)](https://linux22.com/image/517452/%E4%BB%8E%E8%BD%AC%E5%82%A8%E6%81%A2%E5%A4%8D%20MySQL%20%E6%95%B0%E6%8D%AE%E5%BA%93%E6%97%B6%E5%88%9B%E5%BB%BA%E8%A1%A8%E6%97%B6%E5%87%BA%E7%8E%B0%E9%94%99%E8%AF%AF%E4%BB%A3%E7%A0%81%201005%EF%BC%88errno%EF%BC%9A121%EF%BC%89.png)
我有一台 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
看完之后很多关于此错误的线程,主要是关于外键在整个数据库中应该唯一命名的限制,以下简单的解决方案有效:
删除数据库,重新创建并重试:)