1. 检查数据库服务器状态
首先确认数据库服务(如MySQL、PostgreSQL)是否正在运行。使用以下命令检查服务状态:
sudo systemctl status mysqlsudo systemctl status postgresqlsudo systemctl start mysql(MySQL)或 sudo systemctl start postgresql(PostgreSQL)。2. 验证数据库连接配置
检查PHP代码或配置文件(如.env、config.php)中的连接信息,确保主机名、端口、用户名、密码、数据库名正确。常见错误包括:
localhost应为127.0.0.1,或远程服务器IP);3306、PostgreSQL默认5432);3. 测试数据库连通性
使用命令行工具测试从PHP服务器到数据库服务器的连接:
mysql -h 主机名 -P 端口 -u 用户名 -p(输入密码后若能登录,则连接正常);psql -h 主机名 -p 端口 -U 用户名 -d 数据库名。bind-address是否允许远程连接)。4. 检查防火墙设置
若数据库与PHP应用不在同一服务器,需确保防火墙允许数据库端口通信:
ufw:sudo ufw allow 3306/tcp(MySQL)或 sudo ufw allow 5432/tcp(PostgreSQL);iptables,添加对应规则:sudo iptables -A INPUT -p tcp --dport 3306 -j ACCEPT。5. 确认PHP数据库扩展启用
根据使用的数据库类型,确保PHP已安装并启用了对应扩展:
mysqli或PDO_MySQL;pdo_pgsql、pgsql。php -m | grep -E 'mysqli|pdo_mysql|pdo_pgsql|pgsql'。若未启用,编辑php.ini(如/etc/php/8.1/apache2/php.ini),取消对应扩展前的注释(如extension=mysqli.so),然后重启Web服务器:sudo systemctl restart apache2(Apache)或 sudo systemctl restart php8.1-fpm(PHP-FPM)。6. 检查数据库用户权限
确保数据库用户对目标数据库有足够权限(如SELECT、INSERT)。使用以下命令管理权限:
-- 查看用户权限
SHOW GRANTS FOR '用户名'@'主机名';
-- 授权(允许从任何主机访问)
GRANT ALL PRIVILEGES ON 数据库名.* TO '用户名'@'%';
FLUSH PRIVILEGES;
-- 查看用户权限
SELECT * FROM pg_roles WHERE rolname = '用户名';
-- 授权
GRANT ALL PRIVILEGES ON DATABASE 数据库名 TO 用户名;
7. 分析PHP与数据库错误日志
php.ini中的error_log路径(如/var/log/php_errors.log),查看连接错误的详细信息(如mysqli_connect_error()的输出);/var/log/mysql/error.log(查看log_error配置确认路径);/var/log/postgresql/postgresql-版本号-main.log。2002表示无法连接到服务器、1045表示访问被拒绝),帮助快速定位问题。8. 检查PHP-FPM配置(若使用PHP-FPM)
若通过PHP-FPM处理PHP请求,需确保:
/etc/php/版本号/fpm/pool.d/www.conf,确认listen设置为Unix socket(如/run/php/php8.1-fpm.sock)或TCP端口(如127.0.0.1:9000);sudo chown www-data:www-data /run/php/php8.1-fpm.sock(www-data为Apache/Nginx默认用户);sudo ufw allow 9000/tcp;fastcgi_pass unix:/run/php/php8.1-fpm.sock; 或 fastcgi_pass 127.0.0.1:9000;;SetHandler "proxy:unix:/run/php/php8.1-fpm.sock|fcgi://localhost"。sudo systemctl restart php8.1-fpm、sudo systemctl restart apache2/nginx。