Typecho数据库连接失败 Code 1045 错误怎么排查?

文章导读
Typecho 出现数据库连接失败 Code 1045 错误,本质是 MySQL 服务器拒绝了 PHP 脚本的认证请求,最常见原因是配置文件中的密码错误或用户主机权限不匹配。
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

Typecho 出现数据库连接失败 Code 1045 错误,本质是 MySQL 服务器拒绝了 PHP 脚本的认证请求,最常见原因是配置文件中的密码错误或用户主机权限不匹配。

先说结论:1045 错误属于 MySQL 认证失败,需优先核对 Typecho 配置文件中的数据库账号密码,并确认 MySQL 用户允许从当前主机连接。

  • 先确认:检查 typecho 根目录下的 config.inc.php 或安装页面的数据库凭证输入
  • 先处理:验证 MySQL 用户是否存在且 host 权限匹配(localhost 与 127.0.0.1 不同)
  • 再验证:使用命令行 mysql -u 用户 -p 测试相同凭证能否登录

命令速用版

若服务器有命令行权限,可直接通过以下命令快速定位是配置问题还是数据库服务问题。

# 1. 查看 Typecho 配置文件中的数据库信息
cat config.inc.php | grep \"db\"

# 2. 使用相同凭证在命令行测试连接
mysql -u 数据库用户名 -p -h 数据库主机

# 3. 若命令行也报错 1045,登录 MySQL 检查用户权限
mysql -u root -p
SELECT User, Host FROM mysql.user WHERE User = '你的用户名';

为什么会这样

1045 错误核心原因是 MySQL 在登录握手阶段拒绝了连接请求,并非 PHP 代码逻辑错误。

MySQL 内部将「用户名」与「主机名」组合为身份元组,例如 'root'@'localhost' 和 'root'@'127.0.0.1' 被视为两个完全不同的账号。Typecho 通过 PHP PDO 扩展连接数据库,若配置文件中的 host 填写 localhost,但 MySQL 用户仅授权了 127.0.0.1,或密码包含不可见空格,都会触发 Access denied 错误。此外,MySQL 8.0+ 默认使用的 caching_sha2_password 认证插件可能与旧版 PHP 环境不兼容,导致认证失败。

Typecho数据库连接失败 Code 1045 错误怎么排查?

分步处理

按顺序执行以下步骤,每步完成后观察错误是否消失。

步骤一:核对配置文件凭证
检查 Typecho 根目录下的 config.inc.php 文件(或安装界面输入框),确认 dbUser、dbPassword 和 dbHost 字段。

  • 适用场景:刚迁移网站或修改过密码
  • 操作动作:手动重新输入密码,避免复制粘贴带入空格
  • 风险边界:修改 config.inc.php 前请备份文件

步骤二:验证 MySQL 用户主机权限
登录 MySQL 服务器,查询用户允许的主机范围。

SELECT User, Host FROM mysql.user WHERE User = '你的数据库用户名';
  • 适用场景:命令行测试也报 1045 错误
  • 操作动作:若 Host 不匹配,执行 CREATE USER 或 GRANT 命令补充权限
  • 验证结果:确保查询结果中包含配置文件里填写的 host 值

步骤三:重置密码(如遗忘)
若密码不确定,需重置 MySQL 用户密码。

Typecho数据库连接失败 Code 1045 错误怎么排查?
ALTER USER '用户名'@'主机' IDENTIFIED BY '新密码';
FLUSH PRIVILEGES;
  • 适用场景:确认用户存在但密码错误
  • 操作动作:执行上述 SQL 后更新 config.inc.php 中的密码
  • 风险边界:MySQL 8.0+ 需注意认证插件兼容性

怎么验证是否生效

完成配置修改后,刷新 Typecho 安装页面或后台登录页面。

  • 成功标志:页面不再提示数据库连接错误,进入下一步安装或后台界面
  • 日志检查:若仍失败,查看服务器错误日志(如 /var/log/nginx/error.log 或 PHP 错误日志),确认是否仍为 SQLSTATE[HY000] [1045]
  • 命令行验证:在服务器终端执行 mysql -u 用户 -p -h 主机,若能成功登录则证明数据库侧配置无误

常见坑

  • localhost 与 127.0.0.1 混用:MySQL 将两者视为不同主机,配置文件填 localhost 但用户只授权了 127.0.0.1 会报错
  • 密码隐藏字符:从文档复制密码时可能包含不可见空格,建议手动输入
  • 认证插件不兼容:MySQL 8.0+ 默认插件可能导致旧版 PHP 连接失败,需切换为 mysql_native_password
  • 配置文件权限:config.inc.php 若权限设置过严可能导致 PHP 无法读取,但通常报其他错误而非 1045

常见问题

忘记数据库密码怎么重置?

需通过 skip-grant-tables 模式启动 MySQL 后修改密码。

停止 MySQL 服务,使用 mysqld_safe `--skip-grant-tables` 启动,登录后可直接 UPDATE mysql.user 设置新密码,完成后重启服务。

Typecho数据库连接失败 Code 1045 错误怎么排查?

为什么命令行能连上但 Typecho 连不上?

因为命令行与 PHP 运行环境的主机身份不同。

命令行可能使用了 socket 连接,而 PHP 使用 TCP 连接,需检查 MySQL 用户是否同时授权了 localhost 和 127.0.0.1。

MySQL 8.0 连接报错 caching_sha2_password 怎么办?

这是认证插件不兼容问题,不是密码错误。

执行 ALTER USER '用户'@'主机' IDENTIFIED WITH mysql_native_password BY '密码'; 将认证方式改为传统模式。

参考来源

  • MySQL 错误代码 1045 怎么解决_排查用户权限与主机限制
  • PHP 连接 MySQL 报错 1045?:3 分钟快速定位并解决 Access denied 错误
  • PHP PDO 连接 MySQL 访问拒绝错误 (1045) 故障排除指南
  • MySQL 数据库 root 用户连接错误 错误代码:1045
  • ThinkPHP 数据库连接失败怎么办_ThinkPHP 数据库配置常见报错排查方法