Работа с Master-Slave (MySQL) Задержка репликации с Symfony2

Я борюсь со следующей проблемой: у меня есть два сервера MySQL, настроенные как Master-Slave, но они не находятся в одной внутренней сети, поэтому иногда происходит заметная задержка, и чтение из ведомого после записи может привести к к вопросам несоответствия.

Мне было интересно, есть ли способ заставить mysql читать с ведомого устройства и каким-то образом отступить на ведомое, если нет результатов на ведомом устройстве или каком-либо другом решении.

Не уверен, что это можно сделать, ни на уровне приложений, ни на уровне mysql.

Текущая настройка php5 с расширением mysqlnd и следуя документации (добавление slave на yaml http://symfony.com/doc/current/reference/configuration/doctrine.html) Мне удалось заставить приложение читать с раба и писать на мастере.

2

Решение

В конце концов, я обнаружил в PHP-документе Doctrine \ DBAL \ Connections \ MasterSlaveConnection, что можно принудительно использовать мастер в любой момент, просто вызвав:

$conn->connect('master');

Итак, мое решение заключалось в том, чтобы поставить следующую строку в начале действий контроллера, которые требуют согласованности данных:

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

Таким образом, он всегда читает с мастера во время этого потока выполнения, в то время как остальная часть приложения продолжает балансировать операции чтения / записи. Я не уверен, что это лучшее решение, но оно сработало для моих целей.

Я надеюсь, что это помогает кому-то в подобной ситуации.

7

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]