作好的django項目,使用python manage.py runserver 能夠正常work. 然而當將項目使用mod_wsgi部署到apache上以後卻不能鏈接mysql.一直報錯:「Internal Server Error」,查看日誌信息,除了「Can't connect mysql」仍是連不上mysql.python
分別在debug模式以及debug off模式下運行項目,無任何異常,足以證實項目自身配置沒任何錯誤。mysql
運行python manage.py shell,導入MySQLdb,使用驅動代碼測試也無異常。說明驅動的版本什麼的沒有錯誤。web
在django/admin/db/backend/mysql/base.py中直接修改鏈接數據庫的參數信息,並在MySQLdb中的_init.py中打印傳進來的參數信息。sql
python manage.py runserver debug模式開與關打印出來的信息一致。shell
開啓apache 訪問主頁打印出來的信息與上述信息無差別。數據庫
這麼以來就能夠得出結論:項目組件以及配置沒什麼錯誤。apache
通過問題的一系列追蹤,查詢網絡無果。想起mod_wsgi這貨,再根據這個去搜得出結論apache在安裝的時候所配置的系統用戶apache/apache沒有權限訪問默認的mysql.sock配置文件所在路徑。讓修改這個權限,但是真不會修改。因而開始下面的嘗試:django
直接修改apache配置文件中的user和group爲root,比較系統中root的權限最高,沒有他訪問不了的東西。結果在重啓apache的時候報錯,不容許使用root用戶。網絡
又將其修改成mysql/mysql,因mysql/mysql是咱們在安裝mysql時所使用的系統用戶。重啓卻無任何影響,依然是Can't connect mysql測試
再想一想,通常項目生產環境也不會把web跟db配置在一臺Server上倒不如換個其餘機器上的mysql配置。果真如此能夠正常訪問了。
因SELinux阻止apache訪問,另外一個問題就是須要爲apache受權:
setsebool -P httpd_can_network_connect 1
setsebool -P httpd_can_network_connect_db 1