CentOS系统中,PHP错误日志的位置取决于Web服务器配置(PHP-FPM、Apache或Nginx)。常见路径包括:
/var/log/php-fpm/error.log/var/log/httpd/error_log/var/log/nginx/error.logtail -f /var/log/php-fpm/error.log(替换为实际路径)实时查看最新错误日志,快速定位数据库连接问题的具体时间点和错误类型。日志中的错误信息会明确提示问题性质,常见类型包括:
确认PHP代码中的数据库连接配置(如mysqli_connect()或PDO的DSN)是否正确,重点检查:
localhost/IP地址,若数据库在远程服务器需使用IP);3306,需与数据库服务器配置一致);SHOW DATABASES;命令验证)。phpinfo()函数查看当前PHP加载的配置,确认mysqli.default_host、pdo_mysql.default_socket等参数是否正确。确保数据库服务器(如MySQL)正在运行:
# 检查MySQL服务状态
sudo systemctl status mysqld # 或mariadb(取决于安装的数据库)
# 若未运行,启动服务
sudo systemctl start mysqld
# 设置开机自启
sudo systemctl enable mysqld
通过netstat -tulnp | grep 3306(或数据库端口)确认数据库是否监听正确端口。
ping <数据库服务器IP>测试PHP服务器与数据库服务器的网络连接,若不通需排查网络问题;firewalld或ufw),需允许数据库端口(默认3306)的流量:# firewalld(CentOS 7+)
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload
# ufw(Ubuntu)
sudo ufw allow 3306/tcp
若数据库在本地,可临时关闭防火墙测试(sudo systemctl stop firewalld),但生产环境不建议。PHP连接数据库需安装对应扩展(如mysqli、pdo_mysql),检查步骤:
php.ini文件(路径可通过phpinfo()的“Loaded Configuration File”获取),确认以下行未被注释(无;):extension=mysqli.so
extension=pdo_mysql.so
sudo systemctl restart php-fpm # 若使用PHP-FPM
sudo systemctl restart httpd # 若使用Apache
phpinfo()函数搜索“mysqli”或“pdo_mysql”,确认扩展已加载。确保连接数据库的用户具有足够权限(如SELECT、INSERT、CONNECT):
mysql -u root -p
user1从localhost连接mydb数据库):GRANT ALL PRIVILEGES ON mydb.* TO 'user1'@'localhost' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
localhost替换为%(允许所有IP),或指定具体IP:GRANT ALL PRIVILEGES ON mydb.* TO 'user1'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;
若以上步骤未解决问题,可查看数据库服务器的错误日志(如MySQL的/var/log/mysql/error.log),获取更详细的连接失败原因(如“Too many connections”“Aborted connection”等),进一步针对性解决。