将 MySQL 转储应用于 RDS 时出现“无法解析表名”错误

Ben*_*rel 4 mysql foreign-key mysql-5.7 amazon-rds

我正在设置将外部 MySQL 实例复制到 RDS

外部 MySQL 实例和 RDS 都运行 MySQL 5.7.10。

我已按照该程序进行操作,但是在转储数据库mysqldump并将其发送到mysql连接到 RDS 时,出现以下错误:

第 2081 行的 ERROR 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
Run Code Online (Sandbox Code Playgroud)

好的,转储文件确实按字母顺序重新创建了表,因此该Prospect表出现在Restaurant和之前Zone,这可以解释错误。

但是不,因为mysqldump添加SET FOREIGN_KEY_CHECKS=0到文件的顶部,所以无论如何它都应该工作。

所以我决定在一个普通的 MySQL 5.7 安装上测试它,毫不奇怪,转储成功地导入了完全相同的命令。

是什么导致了这个错误,特别是在 RDS 上,以及如何避免它?

Ben*_*rel 7

刚刚发现这是一个在下一个版本 MySQL 5.7.11 中修复错误

从变更日志中摘录:

InnoDB:禁用foreign_key_checks 时,创建具有全文索引和外键约束的表失败。(错误#22094601,错误#78955)

我花了一些时间才弄清楚全文索引是问题的根源,我不得不逐行修剪我的转储文件,直到可以成功导入转储。


不幸的是,RDS 还不支持 MySQL 5.7.11,所以我不得不解决这个问题。这是我所做的:

  • mysqldump像往常一样创建转储文件
  • 打开转储文件并注释掉所有FULLTEXT KEY
  • 在记事本中记下这些行
  • 像往常一样将转储导入副本
  • 连接到副本,并发出ALTER TABLE语句将我在记事本中的每个全文索引添加回其表

这工作得很好,我的表现在完全同步了。