2011-03-07 49 views
2

指定外部MySQL驅動我有運行的apache + mod_python的與MySQL簇(NDB)作爲數據庫服務器的羣集。 python中的代碼使用MySQLdb。爲PHP 5.3

今天,我被添加新程序包在需要PHP的門戶網站。所以不知道PHP 5.3現在附帶的所謂的mysqlnd內部驅動程序,我在同一臺服務器上啓用了mod_php。

這突然產生了徹底決裂的蟒蛇代碼下來!挖掘了一下之後,我注意到MySQLdb庫正在使整數和其他類型變成字符串(python代碼並不期待)。

從阿帕奇禁用mod_php,並且固定它。

我的結論是,不知何故將覆蓋處理在Apache環境中的NDB的東西,弄亂了回報,一切都在本地MySQL驅動程序。

現在,我的問題是,我該怎麼辦?有沒有辦法告訴PHP使用安裝在系統中的mysql驅動程序並禁用它的內部mysql驅動程序?

+0

PHP不會用mysqlnd ' – mfonda 2011-03-07 23:39:44

+0

我認爲這在ServerFault上更有意義。 – 2011-03-07 23:43:01

+0

它是標準的RedHat RPM。我想我需要從頭開始編譯。 – 2011-03-08 03:19:32

回答

0

你最好的選擇可能是使用FastCGI和新FPM SAPI,而不是mod_php的。這將PHP本身從Apache分離出來,這將防止您遇到的庫混淆。

(這也是值得注意的是,如果你的Python程序中使用WSGI,那麼你也可以使用one of the WSGI-FastCGI adapters而不是mod_python的。)

除非你用`--with-mysql的= mysqlnd編譯
+0

我無法在同一臺服務器上使用2個不同的Web服務器。想到的第一個原因是他們將無法共享端口80和443.此外,這些都是具有大量自定義代碼的生產環境。將Web服務器從Apache移動到其他地方需要花費大量的時間和精力來測試和調整代碼(例如,代碼嚴重依賴於mod_python線程之間的共享對象以提高性能) – 2011-03-08 07:14:42

+0

[FastCGI不是Web服務器](http ://www.fastcgi.com/drupal/),它是Web服務器和應用程序之間的接口。您仍然在使用Apache,只是與另一組代碼結合使用。如果底層的PHP(或Python)編寫正確,它永遠不會注意到這種差異。 – Charles 2011-03-08 07:16:55

+0

我現在看到了邏輯。謝謝。我會試一試。 – 2011-03-08 07:33:08