论坛首页突然变成一行白底黑字:Discuz! Database Error,下面跟着一串英文和错误码。后台进不去,会员在群里问是不是被攻击了。先别慌,多数情况是数据库连接或表的问题。

先看清楚错误码

报错页往下拉,通常有一行 Error 或 Errno。1045 是用户名或密码不对,2002 是连不上 MySQL 服务,1146 是表不存在,145 是表损坏需要修复。把完整报错截图或复制下来,搜索时带上错误码,比只搜「数据库错误」有用得多。部分版本会把详细信息写进 data/log 目录,也可以去服务器上看。

检查数据库服务是否还活着

登录服务器,Linux 下执行 systemctl status mysql 或 service mysqld status,看进程在不在。没启动就启动,启动失败看错误日志,常见原因是磁盘满或端口被占。df -h 看一下根分区使用率,100% 的时候 MySQL 会直接罢工。Windows 服务器在服务管理器里找 MySQL 服务,手动启动试试。

配置文件和权限

Discuz! 的数据库信息在 config/config_global.php 里,检查 dbhost、dbuser、dbpw、dbname 四项。改过数据库密码但没同步这个文件,就会一直报 1045。数据库用户要有对应库的增删改查权限,迁移服务器后权限没带过去也很常见。改完文件记得清一下缓存。

表损坏怎么修

phpMyAdmin 里选中出问题的库,勾选表,操作里选「修复表」。命令行用 mysqlcheck -r 库名 表名。修复前先备份,InnoDB 表损坏严重时修复可能失败,需要从备份恢复。MyISAM 表可以试 myisamchk,但要在停库状态下操作。频繁损坏要查硬盘和内存,硬件问题不解决还会再犯。

按这个顺序走一遍,基本能定位到问题:

  • 看错误码,确定是连接、权限还是表的问题。
  • 查服务状态和磁盘空间。
  • 核对配置文件里的账号密码。
  • 备份后修复表,仍不行就恢复最近备份。

判断:能进服务器就先看日志和磁盘,进不去就联系空间商,别在后台页面上反复刷新。