WordPress 报建立数据库连接时出错:先核 wp-config 四元组,再查 MySQL 服务与表修复

前台首页和后台登录页同时弹出「建立数据库连接时出错」(Error establishing a database connection),整站几乎不可用。这通常不是主题坏了,也不是今天那种 Heartbeat 刷 CPU、内存耗尽或固定链接 404------核心是:WordPress 连不上 MySQL/MariaDB,或连上了但关键表不可用。

更稳的顺序是:先核 wp-config.php 里的 DB_NAME / DB_USER / DB_PASSWORD / DB_HOST 是否与面板一致 → 再确认数据库服务在跑、磁盘与连接数正常 → 仅当文案变成「一个或多个数据库表不可用」时才走 repair.php。别一上来重装 WordPress 或乱改表前缀。

先分清:纯连接失败 vs 表不可用

两种界面看起来都「库挂了」,处理路径不同:

  • 建立数据库连接时出错 :多数是凭证错、DB_HOST 写错、MySQL 没起来、连接被拒或打满。PHP 根本没拿到可用连接。
  • 一个或多个数据库表不可用 :往往已经连上库,但某张表损坏或权限不足。这时才考虑 WP_ALLOW_REPAIR + maint/repair.php。

浏览器只截屏不够。打开主机面板的数据库管理、或看 PHP/debug.log 里是否有 Access denied for user、Unknown database、Can't connect to local MySQL server。有明确报错再对症,比盲改密码快。

第一步:核对 wp-config 四元组

用 SFTP/面板文件管理打开站点根目录的 wp-config.php(与 wp-load.php 同级),找到:

php 复制代码
define( 'DB_NAME', 'your_db_name' );
define( 'DB_USER', 'your_db_user' );
define( 'DB_PASSWORD', 'your_db_password' );
define( 'DB_HOST', 'localhost' );

逐项对照主机面板里「当前站点绑定的库名、用户、密码」:

  • 库名 / 用户:迁机、复制站点、面板一键换密后最容易仍写旧值;多站点共用主机时别抄成隔壁站的库
  • 密码 :注意面板显示常是「已设置」而非明文;若刚重置过密码,必须同步改 DB_PASSWORD,改完清一下对象缓存/重启 PHP-FPM 再测
  • DB_HOST :localhost、127.0.0.1、内网 IP、云厂商给的远程地址含义不同。部分环境 localhost 走 Unix socket,127.0.0.1 走 TCP;socket 路径不对时会出现「Can't connect」而面板里 MySQL 明明在跑。远程库还要确认安全组/防火墙放行,以及用户是否授权了来源主机
  • 有 table_prefix 时别误改;连错库或前缀不对会表现为「连上了但像空站」,和纯连接失败不同

生产改 wp-config.php 前先备份该文件。改完用无痕窗口打开首页与 /wp-login.php;若仍报连接错误,去看 Web/PHP 错误日志里的 Access denied 细节,不要连续猜十几次密码把账号锁死。

迁机、换主机、从本地推到云之后,文档根对了但四元组仍指向旧库/旧主机,是高频组合。需要把「库凭证、DB_HOST、文档根」放在同一套环境核对时,可对照 WordPress 迁机与主机环境核对,先确认当前环境再改配置。

第二步:MySQL/MariaDB 服务、磁盘与连接数

四元组与面板一致仍报错时,查服务侧:

  • 面板或 SSH:systemctl status mysql / mariadb(发行版服务名可能不同);确认 active,不是 failed/stopped
  • 磁盘:数据目录所在分区 df -h;磁盘满时服务可能起不来或拒绝写入,表现也像连不上
  • 连接数:Too many connections、连接池打满时,前台同样会报建立连接失败;看 max_connections 与当前会话数,先杀僵尸连接或临时提上限(改完要有回滚计划)
  • 用 phpMyAdmin / 面板「数据库」用同一组 用户密码登录;能进说明凭证对,问题更可能在 DB_HOST/socket/PHP 侧
  • CLI(有权限时):mysql -uUSER -p -hHOST DBNAME 测通再回头看 PHP

可选:在站点根临时放一个仅自己可访、测完即删的最小脚本(勿提交到公开仓库、勿长期留在生产):

php 复制代码
<?php
// 测完立刻删除本文件。勿把真实密码提交到 Git。
$mysqli = @new mysqli( 'DB_HOST', 'DB_USER', 'DB_PASSWORD', 'DB_NAME' );
if ( $mysqli->connect_errno ) {
    echo 'Connect error: ' . $mysqli->connect_errno . ' ' . $mysqli->connect_error;
} else {
    echo 'OK ' . $mysqli->server_info;
    $mysqli->close();
}

把四个占位换成与 wp-config 相同的值。能 OK 而 WP 仍报错:查是否读错了另一份 wp-config(多目录安装、错误文档根)、或 opcode/配置缓存未刷新。测完马上删除该文件。

第三步:仅表损坏时用 repair.php

仅当界面明确是「一个或多个数据库表不可用」,或 phpMyAdmin 里表状态异常时,再考虑官方修复入口。在 wp-config.php 临时加入(放在「就这些,别再问了」注释之前):

php 复制代码
define( 'WP_ALLOW_REPAIR', true );

然后浏览器访问:

https://你的域名/wp-admin/maint/repair.php

按提示选择「修复」或「修复并优化」。跑完后立刻删掉或注释掉 WP_ALLOW_REPAIR------该开关打开时修复页无需登录即可访问,留在生产等于敞开维护入口。

注意:

  • 纯「建立数据库连接时出错」不要指望 repair.php;连不上库时修复页同样起不来或无意义
  • 修复前尽量快照/导出库;表损坏严重时 repair 可能无法完整恢复,需要从备份回滚
  • 修完抽查 wp_options、wp_users、关键业务表是否可读;Woo/会员站再走一遍登录与下单路径

验收清单

  • DB_NAME / DB_USER / DB_PASSWORD / DB_HOST 与面板一致;已区分 localhost / 127.0.0.1 / 远程主机与 socket
  • MySQL/MariaDB 服务 active;磁盘未满;无持续 Access denied / Too many connections
  • 面板或 CLI 用同凭证可连;临时 mysqli 探测(若用过)已删除
  • 仅表不可用场景才启用过 WP_ALLOW_REPAIR;用完已移除 define;repair.php 不再需要时勿留开关
  • 首页与 /wp-login.php 可打开;抽查一篇文章与后台仪表盘;wp-config.php 有备份可回滚

「建立数据库连接时出错」优先「四元组 → 服务与连接 → 必要时再修表」,比重装站点、乱换表前缀更短路径,也不容易把唯一一份生产库改散。

相关推荐
EVEN-09133 小时前
Linux-IPC进程间通信
linux·运维·服务器
徐小黑ACG3 小时前
docker 基础教程
运维·docker·容器
多弗朗皮卡丘3 小时前
Linux 进程信号
linux·运维·服务器
qeen873 小时前
【Linux】动静态库的链接与加载过程
linux·运维·系统编程
李纲明3 小时前
WordPress 登录后跳回登录页或提示「Cookie 被阻止」:先核站点 URL 与 HTTPS 一致,再查安全插件与 CDN
https·登录·cdn·wordpress·cookie·devdiy·站点url
2401_881828323 小时前
MySQL操作命令
android·mysql·adb
鸢尾掠地平4 小时前
MySQL之DML(含例子)
数据库·mysql
重生之小比特4 小时前
【Linux系统】17 库制作与原理(上)
linux·运维·服务器
香蕉大香蕉(06敬畏市场)4 小时前
MySQL 单点详解(06)
java·数据库·mysql·博客·实习