从SLAVE PDO SELECT并INSERT到MASTER

时间:2016-11-11 08:08:28

标签: php mysql pdo

是否有机会在PDO设置中设置SELECT将在SLAVE DB服务器上执行,并且插入&更新& DELETE将在MASTER DB服务器上执行,或者我需要创建PHP处理程序来执行此操作?

情况:

我们有MySQL的 Master - Master 复制。我们将添加两个新服务器,因此它将是 - Master / Slave - Master / Slave

我想为 SELECT 查询创建一些处理。我希望在 SLAVE 而不是 MASTER 上执行 SELECT 查询,并且所有 UPADTE& INSERT& DELETE 查询都将在即可。这有可能通过一些设置吗?

谢谢!

2 个答案:

答案 0 :(得分:6)

不,您无法配置PDO或任何PHP的数据库扩展来执行此操作。这只是因为每个PDO(或MySQLi等)实例代表单个服务器的单个连接。

所以是的,你需要一个知道多个连接的处理程序来做到这一点。一些流行的ORM和其他数据库抽象层确实提供了这样的功能。

答案 1 :(得分:1)

我建议你不要这样做。复制是"异步"。也就是说,当你插入Master时,无法保证在你尝试阅读它之前它会到达Slave。甚至不保证它今天会到来!

如果您的用户在博客上发表评论,然后转到显示评论的页面,那么如果评论未显示,则会感到恼火。他们可能会认为评论已丢失,然后重新发布。当用户抱怨双重发布时,这会导致悲伤。

这被称为"批判性阅读"。这种避免混乱的简单方法是要小心你发送给奴隶的东西 - 也就是什么都不会导致"消失"讯息。

有各种各样的"代理"允许来自您描述的读写分割的包;有些人试图避免使用“批判性阅读”,但我并不信任他们。

Galera集群(参见PXC,MariaDB),同步读取,因此可以避免关键的读取问题。 (但是,您需要应用一个设置。)