Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php PDO从从从机选择并插入主机_Php_Mysql_Pdo - Fatal编程技术网

Php PDO从从从机选择并插入主机

Php PDO从从从机选择并插入主机,php,mysql,pdo,Php,Mysql,Pdo,是否有机会在PDO设置中设置SELECT将在从属DB服务器上执行,Insert&Update&DELETE将在主DB服务器上执行,或者我需要创建PHP处理程序来实现这一点 情况: 我们有MySQL的主-主复制。我们将添加两个新服务器,因此它将是-Master/Slave-Master/Slave 我想为SELECT查询创建一些处理。我希望在从机而不是主机上执行SELECT查询,所有UPADTE&INSERT&DELETE查询都将在主机上执行。这在某些设置下可能吗 谢谢 不,您不能配置PDO或任何

是否有机会在PDO设置中设置SELECT将在从属DB服务器上执行,Insert&Update&DELETE将在主DB服务器上执行,或者我需要创建PHP处理程序来实现这一点

情况:

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

我想为SELECT查询创建一些处理。我希望在从机而不是主机上执行SELECT查询,所有UPADTE&INSERT&DELETE查询都将在主机上执行。这在某些设置下可能吗


谢谢

不,您不能配置PDO或任何PHP数据库扩展来实现这一点。这仅仅是因为每个PDO或MySQLi等实例代表到单个服务器的单个连接


因此,是的,您需要一个能够识别多个连接的处理程序来实现这一点。一些流行的ORM和其他数据库抽象层确实提供了这样的功能。

我建议即使可以也不要这样做。复制是异步的。也就是说,当您插入到主程序中时,无法保证它会在您尝试读取它之前到达从属程序。甚至不能保证它会在今天到达

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

这称为临界读取。这种避免混乱的简单方法是小心你给奴隶们发送的东西——也就是说,不会导致帖子消失

有各种各样的代理包,允许您描述的读写分离;有些人试图避免批评,但我不相信他们


Galera集群see PXC、MariaDB执行同步读取,因此可以避免严重的读取问题。但是,您需要应用一个设置。

如果使用DBAL,您可以轻松地执行此操作,但是,如果您有自己的DB与某个包装类的交互,那么您必须编写自己的代码来处理该类。使用MySQL本机驱动程序可以做到这一点:感谢您提出这个问题,非常有用的@Abhik+chrisAs已经声明这是不可能的。如果可能的话,这可能是非常危险的。原因很简单。如果您将所有选择转到一个从机,而该从机比主机落后几分钟,可能只是几秒钟的一小部分,那么您可能无法获得最新信息。对于关键信息,这可能是一个desaster。所以你需要写一些你自己的逻辑,因为只有你才能决定什么可以选择给新的奴隶,什么应该总是给主人。您还可以将MaxScale与MAriaDB Galera群集一起使用,以选择正确的服务器。这还包括故障切换。我投票支持UP3Y3SKIL3R-您也可以在使用PDO的服务器上安装MaxScale,MaxScale将选择正确的服务器