Jav*_* H. 2 php mysql master-slave symfony
我正在努力解决以下问题:我有两个MySQL服务器,配置为Master-Slave,但它们不在同一个内部网络上,因此有时会有明显的延迟,并且在写入后从slave读取,可能会导致不一致的问题.
我想知道是否有一种方法可以从从属设备中读取mysql,并且如果在从设备或其他解决方案上没有结果,则会以某种方式回退到从设备.
不确定是否可以完成,无论是应该在应用程序层还是在mysql级别.
当前的设置是带有mysqlnd扩展名的php5,并按照文档(在yaml上添加奴隶http://symfony.com/doc/current/reference/configuration/doctrine.html)我设法让应用程序从奴隶中读取并写在主人身上.
最后,我在Doctrine\DBAL\Connections\MasterSlaveConnection的PHP-doc上找到了它可以在任何时候通过调用强制使用master:
$conn->connect('master');
Run Code Online (Sandbox Code Playgroud)
因此,我的解决方案是在控制器操作的开头放置以下行,这些操作需要数据的一致性:
$this->getDoctrine()->getConnection()->connect('master');
Run Code Online (Sandbox Code Playgroud)
这样,它总是在执行流程期间从主服务器读取,而应用程序的其余部分保持平衡读/写.我不确定它是否是最好的解决方案,但它适用于我的目的.
我希望它可以帮助处于类似情况的人.