MySql:由于MyISAM和InnoDB混合,完整性约束失败。如何安全地解决这个问题?

时间:2011-04-11 08:54:06

标签: mysql django innodb myisam

我有一个在Django和MySql上运行的网站。

部分db表使用InnoDB作为引擎,其他一些使用MyISAM。

没有特别的理由。该项目很久以前就开始了,我认为这是由配置的变化引起的。

当InnoDB FK引用MyISAM表时,这会导致某些完整性约束失败。将表从MyISAM更改为InnoDB可以解决问题。

我的问题是该网站正在制作中。它已经有了这种表格组合。有很多桌子。

有没有一种干净安全的方法来解决这个问题?我是否必须将所有MyISAM表更改为InnoDB?这样做有风险吗?

提前感谢您的帮助

1 个答案:

答案 0 :(得分:2)

您当然可以将网站脱机并将MyIsam表格转换为InnoDb。 (当然,首先备份数据库。)

但是,生产网站上的高质量风险并没有改变表的存储引擎。在系统投入生产时,它开始强制执行数据库完整性约束。您可能会发现要执行大量数据修复以允许强制执行约束。

您可能最明智的做法是构建此系统(网站和数据库)的卷影副本,并仔细完成所有更改。跟踪您在卷影副本上执行的命令和配置更改,以便在证明它们正常工作后,您可以在实时副本上再次执行这些更改。但是他们有可能无法工作。

在这个虚拟机时代,卷影副本很容易。