WordPress 数据库连接错误的 5 种成因与逐一排查

· wordpress · 阅读 6
摘要

先说结论:看到「Error establishing a database connection」时,先区分两类——账号密码类(改 wp-config 就能好)和服务类(数据库没起来 / 磁盘满 / 连接数打满)。前者 2 分钟解决,后者要

先说结论:看到「Error establishing a database connection」时,先区分两类——账号密码类(改 wp-config 就能好)和服务类(数据库没起来 / 磁盘满 / 连接数打满)。前者 2 分钟解决,后者要动手改服务器。

先做一件事:确认是「连不上」还是「连上了但选不到库」

用命令行直连最快:

mysql -u 用户名 -p -h 主机 -P 端口
  • 连不上 → 看成因 1、2、3
  • 能连上但 use 库名; 报错 → 看成因 4
  • 能连上且能选库,但 WordPress 仍报错 → 看成因 5

成因 1:wp-config.php 里的账号密码不对

最常见,尤其是迁移站点后忘了改。检查这四行:

define('DB_NAME', '数据库名');
define('DB_USER', '用户名');
define('DB_PASSWORD', '密码');
define('DB_HOST', 'localhost');

坑点:DB_HOST 写 localhost 走的是 socket,写 127.0.0.1 走的是 TCP,某些环境只有一种能用。连不上时把两者互换试一次,能解决相当一部分「明明密码对却连不上」。

成因 2:数据库服务没启动

服务器重启、内存不足被 OOM 杀掉、磁盘满导致 MySQL 自动退出,都会这样。检查:

systemctl status mysql
# 或
systemctl status mysqld

没在跑就启动,启动失败立刻看数据库错误日志(MySQL 8 默认在 /var/log/mysql/error.log)。如果是磁盘满,先清理再启动,否则起来还会再挂。

成因 3:用户没有远程连接权限

从别的机器连数据库时常见。检查并授权:

SELECT user, host FROM mysql.user WHERE user='你的用户名';

如果 host 显示 localhost,说明只允许本机。需要时授权:

GRANT ALL ON 库名.* TO '用户名'@'%' IDENTIFIED BY '密码';
FLUSH PRIVILEGES;

提醒:开放 % 后务必确认 3306 端口没有暴露到公网,或用防火墙限制来源 IP。

成因 4:数据库不存在,或表前缀不匹配

迁移时导入了数据但没建库,或者建了库却导入到另一个库。执行 SHOW DATABASES; 确认库名完全一致(大小写、下划线都算)。

还有一种:库在、数据在,但 $table_prefix 写错(比如原站是 wp_,新配置写了 wp2_),表现是能连上但提示表不存在。

成因 5:连接数打满或内存不足

表现是「时好时坏」「刷新几下就报错」。检查:

SHOW STATUS LIKE 'Threads_connected';
SHOW VARIABLES LIKE 'max_connections';

接近上限时,要么调大 max_connections(治标),要么关掉拖连接的长连接插件/慢查询(治本)。

内存不足也会伪装成连接错误,看 free -m 的可用内存,以及是否频繁 OOM。

排查顺序建议(照这个走最快)

  1. 看数据库服务是否在跑(1 分钟)
  2. 用命令行直连验证账号密码(2 分钟)
  3. 核对 DB_HOST 的 localhost / 127.0.0.1(1 分钟)
  4. 确认库名存在、前缀匹配(2 分钟)
  5. 查连接数与内存(3 分钟)

不要一上来就重装 WordPress,数据库连接错误 99% 与 WordPress 文件无关。