虽然创建没有主键的表绝对是一种不好的做法,但第三方应用程序有自己的架构,并且通过添加主键来更改第三方架构可能会比使用此类应用程序的决定更糟糕(因为我们无法预测它是否以及如何破坏其模式已更改的应用程序,并且它可能带来几乎无法预先知道的维护负担)。
但是,我需要托管这样一个应用程序并为其提供一个高度可用的数据库;该应用程序需要现代的 MySQL,因此 MySQL、MariaDB 和 Percona 都在考虑之列。我需要在数据中心内以及具有单个活动主服务器和其他备用主服务器的数据中心之间设置主主复制。据我目前收集到的信息,MySQL 中的组复制以及 MariaDB 和 Persona 所依赖的 Galera 都要求表具有主键。
有没有办法解开这个结呢?有没有一种方法可以建立一个高度可用的类似 MySQL 的数据库,在非常不希望更改架构或这是不可能的情况下不需要主键?
我没有看到 MySQL 组复制和第三方设计的表的交集不满足组复制要求的解决方案。
我认为你的选择是:
不要使用 MySQL 组复制。您可以手动配置反射复制。也就是说,每个源节点都是另一个源节点的源。它需要几个步骤才能完成,并且它不具备 MySQL 组复制的自动故障转移功能。但我从事的工作是使用 Percona Server 但不使用组复制来操作以这种方式配置的数千个复制集。
您可以立即执行此操作。知道存在组复制解决方案但不能将其用于此第三方应用程序可能会令人沮丧。至少您可以将 GR 用于您控制下的其他模式,或者使用适当的表设计的第三方应用程序。
向第三方软件开发人员提交错误,并要求他们重新设计表以具有主键。我预计这需要数年时间才能让他们改变(如果有的话)。
分叉第三方软件并自行添加主键。这可能是您没有预算承担的开发负担。
首先不要使用此类应用程序。如果他们甚至不确保他们的表具有主键,您必须想知道他们在软件中还做出了哪些其他错误的设计决策。