Discuz 安装过程中数据库连接失败 error code 1045 怎么排查

文章导读
Discuz 安装出现数据库连接失败 error code 1045 通常是因为 MySQL 用户密码错误、主机地址配置错误或数据库用户权限不足。最推荐的处理方向是先在服务器命令行验证账号密码能否登录,再检查 Discuz 安装表单中的数据库主机填写项,风险边界在于不要直接修改生产环境数据库 root 密码以免引发其他业务中断。
📋 目录
  1. A 命令速用版
  2. B 为什么会这样
  3. C 分步处理
  4. D 怎么验证是否生效
  5. E 常见坑
  6. F 常见问题
  7. G 参考来源
A A

Discuz 安装出现数据库连接失败 error code 1045 通常是因为 MySQL 用户密码错误、主机地址配置错误或数据库用户权限不足。最推荐的处理方向是先在服务器命令行验证账号密码能否登录,再检查 Discuz 安装表单中的数据库主机填写项,风险边界在于不要直接修改生产环境数据库 root 密码以免引发其他业务中断。

先说结论:Discuz 安装报错 1045 属于 MySQL 认证失败,需优先排除账号密码和主机配置问题,确认数据库服务可用后再重新提交安装表单。

  • 先确认:MySQL 服务状态正常且账号密码无误。
  • 先处理:通过命令行排除连接问题,再修正安装配置。
  • 再验证:重新运行安装程序直到进入下一步。

命令速用版

在服务器终端执行以下命令,验证账号密码是否能通过 MySQL 认证:

mysql -u 数据库用户名 -p -h 数据库主机地址

输入密码后若能进入 mysql> 提示符,说明账号密码正确;若仍报 1045,则需重置密码或检查用户主机权限。

为什么会这样

Error 1045 是 MySQL 数据库的标准错误码,含义为 Access denied for user,即服务器拒绝了客户端的连接请求。

Discuz 安装程序通过 PHP 脚本向 MySQL 发起连接,当填写的用户名、密码或主机地址与数据库服务端记录不匹配时,MySQL 返回 1045 错误。常见原因包括密码含有特殊字符导致转义错误、数据库用户没有对应主机的登录权限、或旧版本配置文件残留干扰。

分步处理

步骤 1:命令行验证连接

Discuz 安装过程中数据库连接失败 error code 1045 怎么排查

登录服务器 SSH,使用安装页面填写的相同信息尝试连接数据库。如果命令行也失败,问题出在数据库层面,而非 Discuz 程序。

步骤 2:检查数据库主机填写

在 Discuz 安装界面,数据库主机通常填 localhost。如果 MySQL 用户权限表中 host 字段为 127.0.0.1,则 localhost 可能无法连接。尝试将安装表单中的主机改为 127.0.0.1 测试。

步骤 3:检查用户权限

确保数据库用户拥有对该库的 CREATE、ALTER、SELECT 等权限。如果是新建库,建议暂时赋予 ALL PRIVILEGES 权限,安装完成后再回收。

步骤 4:清理旧配置

Discuz 安装过程中数据库连接失败 error code 1045 怎么排查

如果是重新安装,务必删除 config/config_global.php 和 config/config_ucenter.php 文件,避免旧配置干扰新安装流程。

怎么验证是否生效

刷新 Discuz 安装页面,点击下一步后不再出现 1045 错误提示,且页面正常跳转到数据库表结构安装步骤。同时检查服务器 MySQL 错误日志,确认没有新的 Access denied 记录。

常见坑

  • 密码特殊字符:部分特殊字符在 PHP 配置文件中可能需要转义,建议安装阶段使用纯字母数字密码。
  • 主机权限混淆:MySQL 中 user@localhost 和 user@127.0.0.1 被视为不同用户,需确保权限表覆盖对应主机。
  • 残留配置文件:重装 Discuz 时未删除旧 config 文件,导致程序读取旧密码而非表单新密码。

常见问题

密码有特殊字符会影响吗?

会,建议在安装前暂时修改为纯字母数字组合,安装完成后再改回复杂密码。

数据库主机填什么?

本地数据库填 localhost 或 127.0.0.1,远程数据库填具体 IP 地址。

需要新建数据库吗?

需要,且用户对该库要有全部权限,否则无法创建表结构。

root 用户无法连接怎么办?

检查 MySQL 是否禁止了 root 远程登录,或尝试新建一个专用数据库用户用于 Discuz 连接。

参考来源

  • MySQL 官方错误代码说明,Server Error Codes and Messages,https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html