PHP-FPM連接數據庫需依賴對應的PHP擴展(如mysqli或pdo_mysql)。若未安裝,會導致擴展缺失錯誤。
sudo apt-get install php8.1-mysql
sudo systemctl restart php8.1-fpm
phpinfo.php文件(內容為<?php phpinfo(); ?>),通過瀏覽器訪問確認擴展是否存在。若MySQL未啟動,PHP-FPM無法建立連接。
sudo systemctl status mysql
sudo systemctl start mysql
sudo systemctl enable mysql
PHP代碼中的連接信息(主機名、用戶名、密碼、數據庫名)需與數據庫實際配置一致。
mysqli_connect()或PDO連接字符串(如mysql:host=localhost;dbname=test)。.env文件中的DB_HOST、DB_USERNAME等參數。localhost,遠程數據庫需填寫IP或域名。用戶需具備訪問目標數據庫的權限,否則會返回“Access denied”錯誤。
mysql -u root -p
SELECT User, Host FROM mysql.user WHERE User = 'your_username';
SHOW GRANTS FOR 'your_username'@'localhost';
GRANT ALL PRIVILEGES ON your_database.* TO 'your_username'@'localhost' IDENTIFIED BY 'your_password';
FLUSH PRIVILEGES;
若PHP-FPM與MySQL位于不同服務器,需開放MySQL端口(默認3306)。
sudo ufw allow 3306/tcp
sudo ufw reload
日志是定位問題的關鍵,可獲取具體錯誤信息(如連接超時、權限拒絕)。
/var/log/php-fpm.log或/var/log/php8.1-fpm.log(取決于PHP版本)。journalctl查看:sudo journalctl -u php8.1-fpm -n 50 --no-pager
/var/log/mysql/error.log,可通過以下命令查看:sudo tail -n 50 /var/log/mysql/error.log
MySQL默認可能僅綁定到127.0.0.1,導致遠程連接失敗。
/etc/mysql/mysql.conf.d/mysqld.cnf(或/etc/mysql/my.cnf),找到bind-address行:bind-address = 0.0.0.0 # 允許所有IP連接(生產環境建議指定具體IP)
sudo systemctl restart mysql
使用命令行工具驗證連接是否正常,排除PHP代碼問題。
mysql -h localhost -u your_username -p your_database
輸入密碼后若能進入MySQL命令行,說明連接正常;若失敗,需根據錯誤信息進一步排查(如密碼錯誤、用戶權限不足)。按照以上步驟逐一排查,通??山鉀QPHP-FPM連接數據庫失敗的問題。若問題仍存在,建議結合錯誤日志中的具體信息進一步分析(如連接超時需檢查網絡,權限問題需調整用戶權限)。