我正在设置将外部 MySQL 实例复制到 RDS。
外部 MySQL 实例和 RDS 都运行 MySQL 5.7.10。
我已经按照程序进行了操作,但是在转储数据库mysqldump
并将其发送到mysql
连接到 RDS 时,出现以下错误:
第 2081 行的错误 1215 (HY000):无法添加外键约束
SHOW ENGINE InnoDB STATUS
在 RDS 上显示:
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2016-03-25 01:38:56 0x2ad07ddcf700 Error in foreign key constraint of table db/Prospect:
FOREIGN KEY (`restaurantId`) REFERENCES `Restaurant` (`id`),
CONSTRAINT `FK_Prospect_Zone` FOREIGN KEY (`zoneId`) REFERENCES `Zone` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18292 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci:
Cannot resolve table name close to:
(`id`),
CONSTRAINT `FK_Prospect_Zone` FOREIGN KEY (`zoneId`) REFERENCES `Zone` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18292 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
好的,确实转储文件按字母顺序重新创建了表格,因此Prospect
表格出现在Restaurant
and之前Zone
,这可以解释错误。
但是不,因为mysqldump
添加SET FOREIGN_KEY_CHECKS=0
到文件的顶部,所以无论如何它应该可以工作。
所以我决定用一个普通的 MySQL 5.7 安装来测试它,毫不奇怪,转储是用完全相同的命令成功导入的。
是什么导致此错误专门在 RDS 上,以及如何避免它?
刚刚发现这是一个已在下一个版本 MySQL 5.7.11 中修复的错误。
从更新日志中提取:
我花了一些时间才弄清楚全文索引是问题的根源,我不得不逐行修剪我的转储文件,直到可以成功导入转储。
不幸的是,RDS 还不支持 MySQL 5.7.11,所以我不得不解决这个问题。这是我所做的:
mysqldump
像往常一样创建转储文件FULLTEXT KEY
行ALTER TABLE
语句以将我在记事本中的每个全文索引添加回其表中这工作得很好,我的桌子现在完全同步了。