【异常】数据库提示 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)  密码正确当时登陆不上

遇到 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 这个错误通常意味着 MySQL 认为提供的凭据无效。即使您确信密码是正确的,也可能会因为其他原因导致登录失败。

在 MariaDB 中,如果你需要绕过权限表以解决登录问题(例如忘记 root 密码的情况),你可以使用 --skip-grant-tables 参数启动 MariaDB 服务。这将使得 MariaDB 启动时暂时不加载权限表,从而允许你无需密码即可登录数据库。

1.停止数据库

2.使用 --skip-grant-tables 启动数据库

对于 Linux 系统

sudo mysqld_safe --skip-grant-tables &
  • 1.

对于 Windows 系统:

mysqld.exe --skip-grant-tables
  • 1.

3.登录 数据库

mysql -u root
  • 1.

4.重设密码

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
  • 1.

5.添加外网可以访问的权限  

CREATE USER 'root'@'%' IDENTIFIED BY 'your_password';
  • 1.

这里 % 表示任何主机都可以使用此用户登录。

如果你想修改现有的 root 用户条目:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
  • 1.

这条命令将赋予 root 用户从任何主机连接的所有权限。

6.刷新权限

FLUSH PRIVILEGES;
  • 1.

7.验证一下

SELECT User, Host FROM mysql.user WHERE User='root';
  • 1.

以下是一些排查步骤:

  1. 确认用户名和主机名
  • 确保你使用的用户名确实是 root
  • 确认连接尝试中的主机名部分 'localhost' 是正确的。如果你是从远程机器尝试连接,确保使用的是正确的远程 IP 地址或主机名,并且该用户被允许从那个主机连接。
  1. 检查大小写敏感性(如果适用):
  • 在某些系统上,MySQL 用户名和主机名是区分大小写的。
  1. 重置密码
  • 如果你无法确定密码是否正确,可以尝试重置 root 用户的密码。这可以通过跳过权限表来完成,或者通过一个已知的用户账户来执行。
  1. 检查 MySQL 配置文件
  • 确保 MySQL 的配置文件 (my.cnf 或 my.ini) 中没有配置限制,例如 bind-address 设置为某个特定 IP 而不是 0.0.0.0 或 ::1(对于 IPv6)。
  1. 检查 MySQL 日志文件
  • 查看 MySQL 的错误日志文件,以获取更详细的错误信息。这可能有助于诊断问题所在。
  1. 检查 MySQL 用户表
  • 使用另一个具有足够权限的账户登录 MySQL,然后检查 mysql.user 表,确保 root 用户的记录是正确的,并且密码已经被正确设置。
  • 可以使用以下命令查看用户:
SELECT User, Host FROM mysql.user;
  • 1.
  1. 检查防火墙和安全组规则
  • 如果你是从远程位置连接到 MySQL 服务器,确保服务器的防火墙和任何安全组规则都允许你的 IP 地址进行连接。
  1. 使用 MySQL 安全外壳 (SSH) 隧道
  • 如果你在尝试从远程连接到 MySQL 服务器时遇到问题,考虑使用 SSH 隧道。

如果您提供更具体的信息,比如您的操作系统类型、MySQL 版本以及您尝试连接的方式(命令行工具、图形界面客户端等),我可以给出更具体的建议。