在 LNMP(Linux + Nginx + MySQL + PHP) 环境下,“配置数据库连接”一般包括 三层:
下面按最常见场景一步步说明。
mysql -u root -p
CREATE DATABASE testdb DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'testuser'@'localhost' IDENTIFIED BY 'password123';
GRANT ALL PRIVILEGES ON testdb.* TO 'testuser'@'localhost';
FLUSH PRIVILEGES;
✅ 推荐:
<?php
$host = '127.0.0.1';
$port = 3306;
$db = 'testdb';
$user = 'testuser';
$pass = 'password123';
$conn = new mysqli($host, $user, $pass, $db, $port);
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
echo "数据库连接成功";
<?php
try {
$dsn = "mysql:host=127.0.0.1;port=3306;dbname=testdb;charset=utf8mb4";
$pdo = new PDO($dsn, 'testuser', 'password123');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "连接成功";
} catch (PDOException $e) {
echo "连接失败:" . $e->getMessage();
}
.env)DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=testdb
DB_USERNAME=testuser
DB_PASSWORD=password123
return [
'default' => 'mysql',
'connections' => [
'mysql' => [
'type' => 'mysql',
'hostname' => '127.0.0.1',
'database' => 'testdb',
'username' => 'testuser',
'password' => 'password123',
'hostport' => '3306',
'charset' => 'utf8mb4',
],
],
];
Nginx 不直接连接数据库,但常见注意点:
systemctl status php-fpm
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
include fastcgi.conf;
}
# 如果是远程数据库
firewall-cmd --add-port=3306/tcp --permanent
firewall-cmd --reload
| 问题 | 排查 |
|---|---|
| Access denied | 用户名 / 密码 / 权限 |
| Unknown database | 数据库不存在 |
| Connection refused | MySQL 没启动 / 端口错 |
| 本地连不上 | host 用 127.0.0.1 而不是 localhost(socket 问题) |
| PHP 报错无 mysql | 没装扩展 |
systemctl status mysqld
# 或
mysqladmin -u root status
php -m | grep -i mysql
LNMP 中数据库连接 = MySQL 授权 + PHP 配置 + PHP-FPM 正常运行
如果你愿意,可以告诉我:
我可以一步一步帮你查到具体哪一行配置出错。