← 返回错误码列表

MySQL错误码 1045 分析与解决方案

错误信息

Error 1045

拒绝访问用户。检查用户名和密码。

你的PHP应用在使用PDO连接MySQL时遇到了认证失败问题:

'pdo_code' => '28000',
'db_code' => 1045,
'db_error' => 'Access denied for user \'username\'@\'host\' (using password: YES/NO)'

解决方案

  • 检查数据库连接配置中的用户名和密码是否正确
  • 确认MySQL用户是否存在
  • 重置MySQL用户密码
  • 检查MySQL用户的主机限制
  • 验证MySQL认证插件兼容性
  • 检查MySQL服务器是否运行正常

MySQL用户管理示例

-- 查看所有用户
SELECT User, Host FROM mysql.user;

-- 创建新用户
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

-- 修改用户密码(MySQL 5.7+)
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';

-- 修改用户密码(MySQL 5.6)
SET PASSWORD FOR 'username'@'localhost' = PASSWORD('new_password');

-- 删除用户
DROP USER 'username'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

认证流程检查

1. 连接参数验证

主机:

用户名:

密码: 验证失败

错误: 用户名或密码不正确

2. 用户存在性检查

检查用户是否存在

检查主机限制匹配

用户认证失败

3. 解决方案

重置用户密码

确认连接参数

重新测试连接

常见原因与排查

1. 配置问题

  • 用户名拼写错误
  • 密码错误或过期
  • 主机地址配置错误
  • 配置文件中的特殊字符未转义

2. MySQL用户问题

  • 用户不存在
  • 用户被删除或禁用
  • 密码策略变更
  • 认证插件不兼容

3. 网络与服务器问题

  • MySQL服务未运行
  • 网络连接问题
  • 防火墙阻止连接
  • MySQL端口被占用

调试工具

使用以下方法诊断认证问题:

# 命令行测试连接
mysql -u username -p -h localhost

# 检查MySQL服务状态
systemctl status mysql
# 或
service mysql status

# 检查MySQL端口监听
netstat -tlnp | grep 3306

# 查看MySQL错误日志
tail -f /var/log/mysql/error.log

PHP连接测试代码

// 测试数据库连接
$host = 'localhost';
$dbname = 'test_database';
$username = 'test_user';
$password = 'test_password';

try {
  $pdo = new PDO(
    "mysql:host={$host};dbname={$dbname};charset=utf8",
    $username,
    $password,
    [
      PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
      PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]
  );
  echo "✅ 数据库连接成功!";
} catch (PDOException $e) {
  echo "❌ 连接失败: " . $e->getMessage() . "
"
;
  echo "错误代码: " . $e->getCode();
  if ($e->getCode() == 1045) {
    echo "
🔍 请检查用户名和密码是否正确"
;
  }
}