2010-05-17 2 views
3

마스터 mysql db와 4 개의 슬레이브 dbs가있는 웹 애플리케이션이 있습니다. 나는 모든 (또는 거의 모든) 읽기 전용 (SELECT) 쿼리를 슬레이브에서 처리하려고한다. 로드 밸런서는 Apache/PHP를 실행하고 웹 페이지를 제공하기 때문에 사용자를 종속 시스템 중 하나로 자동 전송합니다.PHP mysql_connect timeout 문제없이 슬레이브 상태 확인

//for master server (i.e. - UPDATE/INSERT/DELETE statements) 
$Host = "10.0.0.x"; 
$User = "xx"; 
$Password = "xx"; 
$Link = mysql_connect($Host, $User, $Password); 
if(!$Link)) 
{ 
    die("Master database is currently unavailable. Please try again later."); 
} 

//this connection can be used for READ-ONLY (i.e. - SELECT statements) on the localhost 
$Host_Local = "localhost"; 
$User_Local = "xx"; 
$Password_Local = "xx"; 
$Link_Local = mysql_connect($Host_Local, $User_Local, $Password_Local); 

//fail back to master if slave db is down 
if(!$Link_Local)) 
{ 
    $Link_Local = mysql_connect($Host, $User, $Password); 
} 

내가 다음 SELECT 문에 대한 연결로 $ 모든 업데이트 쿼리에 대한 링크와 $ Link_Local를 사용 : 나는 설치에 같은 데이터베이스에 대한 연결을 포함 파일을 사용하고 있습니다. 슬레이브 서버 데이터베이스가 다운 될 때까지 모든 것이 잘 작동합니다. 로컬 db가 다운 된 경우 $ Link_Local = mysql_connect() 호출은 localhost에 연결을 시도하는 것을 포기하고 스크립트로 다시 돌아 오기 전에 적어도 30 초가 걸립니다. 이로 인해 페이지 서비스의 막대한 백 로그가 발생하고 기본적으로 시스템 응답이 느려지므로 시스템이 종료됩니다.

누구든지 PHP를 통해 슬레이브 서버에 대한 연결을 처리하는 더 좋은 방법을 알고 있습니까? 아니면 2-3 초 후에 mysql_connect 호출을 멈추는 데 사용할 수있는 일종의 타임 아웃 기능이 있습니까?

도움 주셔서 감사합니다. 다른 mysql_connect 스레드를 검색했지만이 문제를 해결하지 못했습니다. 당신이 4dB의 노예가있는 경우

; Maximum time (in secondes) for connect timeout. -1 means no limit 
mysql.connect_timeout = 1 

는, 다음의 DB 요청에 응답 할 수있는 꽤 괜찮은 네트워크가 있어야 :이 값을 설정 php.ini 파일의 [MySQL의] 섹션에서

답변

3

, 1 초 미만. 서버 빌드를 신뢰하십시오.

그런 다음 노예들이 내려가는 것을 고쳐라 !! 그게 문제 야 !!

마지막으로 모든 페이지 요청에 마스터 DB에 대한 링크가 필요하지는 않습니다. 사용할 데이터베이스의 쿼리 유형을 기반으로 결정할 연결 관리자 클래스를 배치해야합니다. 그러면 마스터 DB에 대한 연결 수가 줄어 듭니다.

+0

좋아요! 정보 주셔서 감사합니다. 나는 커넥터 클래스를 살펴볼 것이다. 나는 여전히 PHP의 OO 측을 배우고 있으므로 수업을받는 것이 문제가 될 수 있습니다! 귀하의 응답은 현재 상황에 완벽했습니다. – Jonathon

+0

lol, ok. 어쨌든 upvote에 대해 :) – Zak

+0

나는 당신에게 upvote를 주려고했지만 시스템은 적어도 15 개의 평판 포인트를 가져야한다고 말했습니다! 죄송합니다! – Jonathon