使用Symfony2处理主从(MySQL)复制延迟

时间:2014-11-12 14:53:37

标签: php mysql symfony master-slave

我正在努力解决以下问题:我有两台MySQL服务器,配置为Master-Slave,但它们不在同一个内部网络上,因此有时会有明显的延迟,并且在写入后从slave读取,可能会导致不一致的问题。

我想知道是否有办法让奴隶进行mysql读取,并且如果奴隶或其他解决方案没有结果,就会以某种方式回退到奴隶。

不确定是否可以完成,无论是应该在应用程序层还是在mysql级别。

当前的设置是带有mysqlnd扩展名的php5,并按照文档(在yaml http://symfony.com/doc/current/reference/configuration/doctrine.html上添加slave)我设法让应用程序从slave读取并在master上写入。

1 个答案:

答案 0 :(得分:7)

最后,我在Doctrine \ DBAL \ Connections \ MasterSlaveConnection的PHP-doc上发现,只需调用它就可以强制执行master的使用:

$conn->connect('master'); 

所以,我的解决方案是在控制器操作的开头放置以下行,这些操作需要数据的一致性:

$this->getDoctrine()->getConnection()->connect('master');

这样,它总是在执行流程期间从主服务器读取,而应用程序的其余部分保持平衡读/写。我不确定它是否是最好的解决方案,但它可以用于我的目的。

我希望它可以帮助处于类似情况的人。