Skip to content

不仅是密码错了?深扒 WordPress "建立数据库连接时出错" 的 4 种原因

如果说有什么画面能让 WordPress 站长瞬间血压飙升,那屏幕上那行冷冰冰的黑体大字绝对排名前三:

Error Establishing a Database Connection

翻译过来就是:“建立数据库连接时出错”。

这就好比你开了一家餐厅(WordPress 网站),客人进来了,服务员(PHP)也准备好了,但是厨房(MySQL 数据库)的大门被焊死了,或者是厨师集体罢工了。

很多新手遇到这个问题,第一反应是:“我没改密码啊?昨天还好的啊?”

确实,密码错误是最常见的原因,但绝不是唯一原因。如果你检查了配置文件发现账号密码都没错,但网站依然打不开,那么请继续往下看。本文将深扒这行报错背后的 4 种“真凶”。

嫌疑人一:最常见的“手滑”—— wp-config.php 配置错误

虽然你说你没改密码,但排查必须从最基础的开始。这通常发生在:

  1. 你刚把网站从一个主机迁移到另一个主机。
  2. 你在面板里重置了数据库密码,但忘记更新配置文件。

排查方法: 通过 FTP 或文件管理器,打开网站根目录下的 wp-config.php 文件,检查以下四项:

php
// 数据库名
define( 'DB_NAME', 'database_name_here' );

// 数据库用户名
define( 'DB_USER', 'username_here' );

// 数据库密码
define( 'DB_PASSWORD', 'password_here' );

// 数据库主机
define( 'DB_HOST', 'localhost' );

易错点提示:

  • DB_HOST:大多数主机(如 SiteGround, 宝塔)这里填 localhost 即可。但有些云服务商(如阿里云 RDS)会给你一个长长的 URL 地址。
  • 前缀:有些面板创建数据库时会自动加前缀(比如 user_dbname),别漏了。

嫌疑人二:数据库“累瘫了”—— 表损坏 (Table Corruption)

如果你的网站表现很诡异:前台报错连不上数据库,但后台 /wp-admin/ 却提示“需要修复数据库”;或者报错时有时无。

这通常意味着你的凭证是对的,但数据库里的某张表(Table)坏了。原因可能是服务器突然断电、硬盘满了,或者某个插件写入了脏数据。

修复方法(WordPress 自带神技):

WordPress 内置了一个自动修复工具,但默认是关闭的。

  1. 打开 wp-config.php 文件。
  2. /* That's all, stop editing! Happy publishing. */ 这行之前,添加一行代码:
    php
    define( 'WP_ALLOW_REPAIR', true );
  3. 保存后,访问这个隐藏地址: http://你的域名.com/wp-admin/maint/repair.php
  4. 你会看到一个修复页面,点击 "Repair Database"(修复数据库)或 "Repair and Optimize Database"(修复并优化数据库)。

⚠️ 重要提示: 修复完成后,务必删除 wp-config.php 里添加的那行代码!因为这个修复页面不需要登录就能访问,长期开启有安全隐患。

嫌疑人三:服务器“饿晕了”—— 内存不足 (OOM Killed)

这是 VPS 用户(尤其是 1GB/2GB 小内存机器) 最常遇到的噩梦,也是最容易被误判的情况。

症状:

  • 网站突然打不开,提示数据库错误。
  • 你去面板(宝塔/1Panel)里看,发现 MySQL 服务停止了 (Stopped)
  • 你手动重启 MySQL,网站好了。但过了一会儿(或者第二天),又挂了。

真相: 这不是玄学,这是 Linux 系统的自我保护机制 —— OOM (Out Of Memory) Killer。 当你的服务器内存耗尽时,Linux 为了不让系统崩溃,会把占用内存最大的那个进程“杀掉”。在 Web 服务器里,通常最吃内存的就是 MySQL。

为什么会内存不足?

  1. 并发太高:突然来了很多爬虫或访问。
  2. 配置不当:MySQL 配置试图占用比物理内存更多的资源。
  3. 垃圾数据太多:正如我在 SiteGround 数据库超限自救指南 里提到的,臃肿的数据库不仅占硬盘,查询时也更吃内存。

解决方案:

  1. 治标(紧急):重启 MySQL 服务。
    • SSH 命令:service mysql startsystemctl restart mysqld
  2. 治本(优化)
    • 添加 Swap(虚拟内存):如果你用的是 1G/2G 内存的 VPS,请务必开启 2G-4G 的 Swap。这能给 MySQL 一个缓冲,不至于直接被杀掉。
    • 限制 MySQL 连接数:在 my.cnf 中适当调低 max_connections
    • 清理数据库:参考 SiteGround 数据库超限自救指南 清理 wp_options 和日志表,减轻数据库负担。

嫌疑人四:权限被“锁死”了—— 用户权限丢失

这种情况比较少见,但也会发生。你创建了数据库,也创建了用户,密码也对,但就是连不上。

原因可能是这个数据库用户(User)没有被授权(Privileges)去操作这个数据库(Database)

排查方法:

  • cPanel/SiteGround 用户:进入 MySQL Databases 页面,拉到底部,查看 "Current Users" 部分,确保你的用户已经 "Added To" 你的数据库,并且权限是 "ALL PRIVILEGES"。
  • 宝塔用户:在数据库管理页面,检查该数据库对应的用户权限设置。

总结:预防胜于救火

当你排除了以上 4 种情况,成功修好了数据库连接错误后,千万不要觉得“万事大吉”。

数据库连接错误往往是系统不稳定的早期信号。如果是因为内存不足(原因三)导致的,说明你的服务器资源已经捉襟见肘,或者配置急需优化。

建议你立刻执行一次全面的系统体检。我在 WordPress 独立站日常巡检 SOP 中详细列出了检查清单:

  • 检查磁盘空间:满了也会导致数据库无法写入而崩溃。
  • 检查错误日志:查看 error_log 是否有其他插件在持续报错,消耗资源。
  • 配置监控报警:如果是 VPS,建议配置“服务停止自动重启”或“宕机邮件报警”。

记住: 数据库是 WordPress 的心脏。心脏骤停一次可能还能救回来,但长期超负荷运转,迟早会出大问题。