2011-03-07 8 views
2

데이터베이스로 MySQL 클러스터 (NDB)를 사용하는 apache + mod_python을 실행하는 서버 클러스터가 있습니다. python의 코드는 MySQLdb를 사용합니다.PHP 5.3 용 외부 MySQL 드라이버 지정

오늘 PHP가 필요한 웹 포털에 새 패키지를 추가하고있었습니다. 그래서 PHP 5.3에 포함 된 소위 mysqlnd 내부 드라이버를 모른 채, 같은 서버에서 mod_php를 사용할 수있게되었습니다.

갑자기 총 파이썬 코드가 무너졌습니다 !!! 조금 파고 들자 MySQLdb 라이브러리가 정수와 다른 유형을 문자열 (파이썬 코드가 기대하지 않는 것)로 사용하고 있음을 알게되었습니다.

아파치에서 mod_php를 비활성화하면 문제가 해결되었습니다.

필자의 결론은 어떻게 든 아파치 환경에서 NDB를 다루는 네이티브 mysql 드라이버를 오버라이드하여 반환 값과 모든 것을 망칠 수 있다는 것이다.

이제 제 질문은 무엇을 할 수 있습니까? PHP가 시스템에 설치된 mysql 드라이버를 사용하고 내부의 mysql 드라이버를 사용하지 않도록 지시하는 방법이 있습니까?

+0

PHP는 mysqlnd를 사용하지 않습니다 ' – mfonda

+0

나는 이것이 ServerFault에 더 합리적이라고 생각한다. –

+0

표준 RedHat RPM입니다. 나는 처음부터 컴파일 할 필요가 있다고 생각한다. –

답변

0

가장 좋은 방법은 mod_php 대신 FastCGI와 FPM SAPI를 사용하는 것입니다. 이렇게하면 아파치에서 PHP 자체가 분리되어 사용자가 겪고있는 라이브러리 혼동을 막을 수 있습니다.

(또한 파이썬 프로그램이 WSGI를 사용하는 경우, 당신은 대신하여 mod_python의 one of the WSGI-FastCGI adapters를 사용할 수 있음을 주목할 필요가있다.) 당신이 --with-mysql을 = mysqlnd`로 컴파일하지 않는

+0

동일한 서버에서 2 개의 다른 웹 서버를 사용할 수 없습니다. 가장 먼저 떠오르는 이유는 80 번 포트와 443 번 포트를 공유 할 수 없기 때문입니다. 또한이 포트는 사용자 지정 코드가 많은 프로덕션 환경입니다. 웹 서버를 Apache에서 다른 것으로 옮기려면 코드를 테스트하고 조정하는 데 많은 시간과 노력이 필요합니다. 예를 들어 코드는 성능을 위해 mod_python의 스레드간에 공유 객체에 크게 의존합니다. –

+0

[FastCGI는 웹 서버가 아닙니다] (http : //www.fastcgi.com/drupal/), 웹 서버와 응용 프로그램 간의 인터페이스입니다. 당신은 여전히 ​​다른 코드 세트와 함께 아파치를 사용하고있을 것이다. 기초가되는 PHP (또는 Python)가 올바르게 작성되면 차이점을 알 수 없습니다. – Charles

+0

나는 논리를 지금 본다. 감사. 나는 그것을 시도 할 것이다. –