有個與第三方對接的系統(tǒng),今天對方突然反映無法連接我們的MongoDB數(shù)據(jù)庫,提示php class mongodb driver manager not found錯誤。對接系統(tǒng)之前一直運(yùn)行很好,沒有出現(xiàn)過這個問題。
服務(wù)器掛掉?MongoDB數(shù)據(jù)庫掛掉?
迅速檢查了服務(wù)器,OK。測試了MongoDB數(shù)據(jù)庫的連接性,也OK!此外這個對接系統(tǒng)最近沒有做過任何的版本與配置修改,那問題發(fā)生在哪里?
突然想起前幾日重啟了服務(wù)器,會不會是有些服務(wù)沒有運(yùn)行?對接系統(tǒng)是通過部署在我們服務(wù)器的php腳本實現(xiàn)的。這時自己才依稀記起在當(dāng)初做對接配置時,是需要運(yùn)行一個php相關(guān)的服務(wù),經(jīng)查詢是php-fpm(FastCGI Process Manager)服務(wù)。php-fpm是一個php的FastCGI管理器,實現(xiàn)了FastCGI協(xié)議,負(fù)責(zé)對php請求的進(jìn)行解析。
利用命令sudo service php-fpm start啟動php-fpm,未提示任何錯誤。正當(dāng)以為自己搞定時,卻被對方的回復(fù)潑了一盆冷水,還是不行,提示同樣的錯誤。
既然提示驅(qū)動未找到,那么是不是哪里的配置不正確?php訪問MongoDB數(shù)據(jù)庫需要通過一個驅(qū)動程序,而這個驅(qū)動程序是通過一個php的擴(kuò)展來實現(xiàn)加載。檢查了mongodb.so的擴(kuò)展以及php.ini的配置,發(fā)現(xiàn)都沒有問題。這時自己陷入一種摸不著頭腦的慌亂狀態(tài),不斷問自己問題會在哪里。
突然想起這臺服務(wù)器的php安裝曾經(jīng)出現(xiàn)過問題,安裝了兩次php,造成有兩個php程序,而且版本都是一樣的,我想可能就是由于這個引起的。利用php -info檢查php.ini的配置信息,果真與自己查看另一個php.ini的配置文件不太一樣。在另外一個配置文件中,mongodb.so擴(kuò)展被做了配置,而這個默認(rèn)的卻沒有。
對于程序的bug,找到原因,也就找到解決方案。在啟動php-fpm時,顯示指定了php.ini以及php-fpm.ini的配置,結(jié)果一切正常!啟動命令如下:
/usr/local/php/sbin/php-fpm -c <php.ini的絕對路徑> -y <php-fpm.conf的絕對路徑>
對于這個問題,網(wǎng)上基本都是給出檢查mongodb.so擴(kuò)展配置是否正確的解決方案,我想這是大部分人遇到的問題。對于我這種情況到目前為止還不見有人提起,寫下此文給以后會遇到同樣問題的人做些參考。