部署到 linux 服务器后如何修复 MySql 中的 'Cannot add or update a child row: a foreign key constraint fails'?

How to fix 'Cannot add or update a child row: a foreign key constraint fails' in MySql after deployment to linux server?

我的 MySql 数据库和 ASP.NET Core 2.2 应用程序在我的本地 Windows 机器上运行良好。但是当我将它们发布到 Ubuntu 18.10 并尝试为我的 User 插入任何子记录时,我得到以下异常:

MySql.Data.MySqlClient.MySqlException (0x80004005): Cannot add or update a child row: a foreign key constraint fils (library.Books, CONSTRAINT FK_Books_Users_UserId FOREIGN KEY (UserId) REFERENCES users (id))

在创建 book 之前,用户已经创建并具有 Id.

两个表都使用 InnoDB 引擎。

两个表具有相同的排序规则。

此问题发生在用户连接的所有模型上。

部署的数据库中填充了我的本地数据库转储。

数据库提供商:Pomelo.EntityFrameworkCore.MySql

我认为问题一定出在 Windows 和 Ubuntu 之间的某些差异上。但我不知道除了区分大小写不同之外它还能是什么,事实证明这在这里不是问题,因为我尝试了不同的 lower_case_table_names 配置。

问题出在 mysqldump。正如问题中提到的,本地数据库被导出,然后导入到生产环境中。但是本地和生产 MySQL 版本是不同的。一些 table 和列名称以小写形式导出。

解决方案是将所有损坏的名称重命名为有效名称,然后才导入转储。或者,如果您不想每次都这样做,请使用与生产数据库上的 on 相对应的 mysqldump 版本转储本地数据库。