2014-11-12 4 views
2

다음과 같은 문제로 어려움을 겪고 있습니다. 마스터 슬레이브로 구성된 두 개의 MySQL 서버가 있지만 동일한 내부 네트워크에 있지 않으므로 때때로 존재합니다. 눈에 띄는 지연, 그리고 쓰기 후에 슬레이브로부터 읽는 것은 불일치 문제를 일으킬 수 있습니다.Master-Slave (MySQL) 처리 Symfony2를 사용한 복제 지연

슬레이브 또는 다른 솔루션에 결과가없는 경우 슬레이브에서 mysql을 읽는 방법이 있는지 궁금하다.

응용 프로그램 계층 또는 mysql 수준에 있어야하는 경우에도이를 수행 할 수 있는지 확실하지 않습니다.

현재 설정은 mysqlnd 확장자를 가진 php5이며 문서 (yaml http://symfony.com/doc/current/reference/configuration/doctrine.html에 슬레이브 추가)를 따라 앱을 슬레이브에서 읽고 마스터에 쓸 수있게했습니다.

답변

7

결국, 나는 \ MasterSlaveConnection는 어떤 점에서 마스터의 사용을 강제 할 수 있다는를 바로 호출하여 교리 \ DBAL \ 연결의 PHP-문서에서 발견 :

$conn->connect('master'); 

그래서, 내 솔루션이었다 데이터에 일관성을 필요로하는 컨트롤러 액션의 시작 부분에 다음 줄을 넣어 : 응용 프로그램의 나머지 부분은 읽기의 균형을 유지하면서,

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

이 방법은, 항상 그 실행 흐름 중에 마스터에서 읽기/씁니다. 나는 그것이 최선의 해결책인지 확실하지 않지만 그것이 내 목적을 위해 일했다.

나는 비슷한 상황에있는 누군가를 돕기를 바랍니다.