看到“Error establishing a database connection”,说明 WordPress 已经跑到了连接数据库这一步,但没连上。问题一定出在四个环节之一:数据库服务没起来、连接参数写错、数据库用户没权限、或者数据库主机/端口不通。下面按从快到慢的顺序排查,大部分情况 5 分钟内能定位。
先确认数据库服务本身是否在运行
SSH 登录服务器,先看 MySQL 或 MariaDB 的状态:
systemctl status mysql
# 或
systemctl status mariadb
如果显示 inactive (dead) 或 failed,直接启动并设置开机自启:
systemctl start mysql
systemctl enable mysql
启动失败通常是磁盘写满、内存不足或数据目录权限错误。用 journalctl -u mysql -n 50 看具体报错。磁盘满是最常见的,先 df -h 确认一下。
核对 wp-config.php 里的连接参数
参数写错是第二高频原因。打开网站根目录下的 wp-config.php,检查这四行:
define( 'DB_NAME', 'wordpress' );
define( 'DB_USER', 'wpuser' );
define( 'DB_PASSWORD', '你的密码' );
define( 'DB_HOST', 'localhost' );
- DB_NAME:数据库名要和实际建库时一致,注意大小写(Linux 下 MySQL 默认区分)。
- DB_USER / DB_PASSWORD:很多主机面板改密码后,这里没同步更新,是最容易踩的坑。
- DB_HOST:本机数据库一般写
localhost;如果数据库在另一台机器,写 IP 或域名。端口不是 3306 时,写成localhost:3307这种格式。
改完保存,刷新页面。如果还报错,继续往下。
用命令行直接测试连接
绕开 WordPress,直接用配置里的参数连一次,能快速区分是参数问题还是权限问题:
mysql -u wpuser -p -h localhost wordpress
输入密码后:
- 报
Access denied for user:用户名或密码不对,或者该用户没有从当前主机连接的权限。 - 报
Unknown database:数据库名写错,或库根本没建。 - 报
Can't connect to MySQL server:服务没起、端口不通,或 socket 路径不对。 - 能进去:说明参数和权限都正常,问题可能在 WordPress 的缓存或文件权限,检查
wp-content目录是否可写。
检查数据库用户权限与主机限制
MySQL 用户是绑定来源主机的。如果 WordPress 和数据库在同一台机器,用户应为 'wpuser'@'localhost';如果应用连的是 127.0.0.1,而用户只授权了 localhost,也会被拒。用 root 登录后查看:
SELECT user, host FROM mysql.user;
SHOW GRANTS FOR 'wpuser'@'localhost';
如果权限不对,补授权:
GRANT ALL PRIVILEGES ON wordpress.* TO 'wpuser'@'localhost' IDENTIFIED BY '你的密码';
FLUSH PRIVILEGES;
注意:IDENTIFIED BY 在 MySQL 8.0 中已不推荐和 GRANT 一起用,8.0 建议先 CREATE USER 再 GRANT。改完密码后,务必同步更新 wp-config.php。
几个容易被忽略的点
- socket 与 TCP 混用:
localhost走 Unix socket,127.0.0.1走 TCP。如果 socket 文件路径变了,写127.0.0.1往往能绕开。 - 数据库连接数打满:
SHOW STATUS LIKE 'Threads_connected';对比max_connections,满了就调大或排查慢查询。 - 云数据库白名单:用 RDS 等托管数据库时,安全组或白名单没放行服务器 IP,表现和连不上完全一样。
- 改完没生效:如果用了对象缓存或 OPcache,重启 PHP-FPM 再试。
按这个顺序走一遍,绝大多数“建立数据库连接错误”都能定位到具体那一步。真正难缠的通常是权限和主机限制,而不是 WordPress 本身。

