数据库连接问题是PHP应用常见的故障类型,排查需围绕服务状态、配置正确性、网络连通性、权限设置四大核心方向展开,以下是具体步骤:
首先确认数据库服务器(如MySQL、PostgreSQL)是否正在运行。以MySQL为例,使用以下命令查看服务状态:
sudo systemctl status mysql
若服务未启动,执行sudo systemctl start mysql启动;若启动失败,需检查数据库自身日志(通常位于/var/log/mysql/error.log)排查启动错误。
PHP需安装对应的数据库扩展才能连接数据库(如MySQLi、PDO_MySQL)。通过以下命令查看已安装的PHP扩展:
php -m | grep -E 'mysqli|pdo_mysql'
若未安装,使用以下命令安装(以PHP 8.1为例):
sudo apt-get install php8.1-mysql
安装后重启Web服务器(Apache/Nginx)使扩展生效:
sudo systemctl restart apache2 # 或 nginx
检查PHP代码或配置文件(如.env、config.php)中的连接信息,确保以下参数无误:
localhost或IP地址,远程连接需用IP);3306、PostgreSQL默认5432);可通过简单的PHP脚本测试连接(如test_connection.php):
<?php
$servername = "localhost";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";
$conn = new mysqli($servername, $username, $password, $dbname);
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
echo "Connected successfully";
?>
访问该脚本,若显示“Connected successfully”则配置正确,否则需修正代码中的参数。
若数据库与PHP应用不在同一服务器,需确保网络可达且防火墙允许数据库端口通信:
telnet <数据库服务器IP> 3306
若连接失败,需检查网络路由或安全组规则。ufw)允许端口:sudo ufw allow 3306/tcp # MySQL端口
sudo ufw reload
确保数据库用户具备访问指定数据库的权限。以MySQL为例,执行以下命令查看用户权限:
SHOW GRANTS FOR 'your_username'@'your_host';
若权限不足,授予相应权限并刷新:
GRANT ALL PRIVILEGES ON your_database.* TO 'your_username'@'your_host';
FLUSH PRIVILEGES;
对于PostgreSQL,使用:
GRANT ALL PRIVILEGES ON DATABASE your_database TO your_username;
错误日志是定位问题的关键,需检查以下日志文件:
php.ini中的error_log参数指定(如/var/log/php_errors.log),可通过tail -f实时查看最新错误:sudo tail -f /var/log/php_errors.log
/var/log/mysql/error.log,PostgreSQL位于/var/log/postgresql/postgresql-<version>-main.log,查看最新错误:sudo tail -f /var/log/mysql/error.log # MySQL
sudo tail -f /var/log/postgresql/postgresql-15-main.log # PostgreSQL(版本可能不同)
日志中会明确提示连接失败的具体原因(如“Access denied for user”“Can’t connect to MySQL server”)。通过以上步骤逐一排查,可快速定位并解决Ubuntu PHP日志中的数据库连接问题。若问题仍未解决,需结合日志中的具体错误信息进一步分析(如SSL配置错误、数据库字符集不匹配等)。