1. 未安裝或未正確配置PHP MySQL擴展
PHP-FPM需要對應的MySQL擴展才能與數據庫通信。若未安裝擴展,PHP代碼中的mysqli_connect()或PDO連接會失敗。需根據PHP版本安裝對應擴展(如PHP 8.1需安裝php8.1-mysql),安裝后重啟PHP-FPM服務使擴展生效。
2. MySQL服務未啟動或無法訪問
若MySQL服務未運行,PHP-FPM無法建立連接??赏ㄟ^sudo systemctl status mysql檢查服務狀態,未啟動則用sudo systemctl start mysql啟動。此外,需確認MySQL配置文件(/etc/mysql/mysql.conf.d/mysqld.cnf)中的bind-address設置為127.0.0.1(本地訪問)或0.0.0.0(允許遠程訪問)。
3. 數據庫連接信息錯誤
PHP代碼中的連接參數(主機名、用戶名、密碼、數據庫名)需與實際一致。常見錯誤包括:主機名寫錯(如localhost誤寫為127.0.0.1但MySQL未監聽IP)、用戶名/密碼拼寫錯誤、數據庫名不存在。需仔細核對代碼中的mysqli_connect()或PDO配置。
4. MySQL用戶權限不足
即使連接信息正確,用戶無權限訪問數據庫也會導致失敗。需用root賬戶登錄MySQL,執行GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host' IDENTIFIED BY 'password'; FLUSH PRIVILEGES;授予用戶對應數據庫的訪問權限(host需與連接信息中的主機名一致,如localhost)。
5. 防火墻限制
若PHP-FPM與MySQL位于不同服務器,防火墻可能阻止3306端口(MySQL默認端口)的通信。需配置防火墻允許該端口的入站連接(如Ubuntu的ufw命令:sudo ufw allow 3306)。
6. PHP-FPM與Nginx通信問題(間接影響)
若PHP-FPM未正常運行,Nginx無法將PHP請求轉發給它,可能導致類似“連接失敗”的假象。需檢查PHP-FPM服務狀態(sudo systemctl status phpX.X-fpm),確認fastcgi_pass指令中的socket文件路徑(如/var/run/php/php8.1-fpm.sock)與PHP-FPM配置一致,且socket文件權限允許Nginx用戶(通常為www-data)訪問。
7. PHP-FPM進程池配置不當
若pm.max_children(最大子進程數)設置過低,高并發時所有進程被占用,新請求無法處理,可能表現為連接超時或失敗。需根據服務器資源(CPU、內存)調整該參數(如pm.max_children = 50),并重啟PHP-FPM使配置生效。