IT

WordPress 数据库连接错误排查:从 wp-config 到 MySQL 权限

AI智能摘要

WordPress 报数据库连接错误,别急着重装。先看 MySQL 服务起没起,再核对 wp-config.php 里的库名、用户、密码、主机,然后用命令行直接连一次,最后查用户权限和主机白名单。按这个顺序走,大部分问题几分钟就能定位。

看到“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 本身。

发表评论