【异常】数据库提示 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 系统
对于 Windows 系统:
3.登录 数据库
4.重设密码
5.添加外网可以访问的权限
这里 %
表示任何主机都可以使用此用户登录。
如果你想修改现有的 root
用户条目:
这条命令将赋予 root
用户从任何主机连接的所有权限。
6.刷新权限
7.验证一下
以下是一些排查步骤:
- 确认用户名和主机名:
- 确保你使用的用户名确实是
root
。 - 确认连接尝试中的主机名部分
'localhost'
是正确的。如果你是从远程机器尝试连接,确保使用的是正确的远程 IP 地址或主机名,并且该用户被允许从那个主机连接。
- 检查大小写敏感性(如果适用):
- 在某些系统上,MySQL 用户名和主机名是区分大小写的。
- 重置密码:
- 如果你无法确定密码是否正确,可以尝试重置
root
用户的密码。这可以通过跳过权限表来完成,或者通过一个已知的用户账户来执行。
- 检查 MySQL 配置文件:
- 确保 MySQL 的配置文件 (
my.cnf
或my.ini
) 中没有配置限制,例如bind-address
设置为某个特定 IP 而不是0.0.0.0
或::1
(对于 IPv6)。
- 检查 MySQL 日志文件:
- 查看 MySQL 的错误日志文件,以获取更详细的错误信息。这可能有助于诊断问题所在。
- 检查 MySQL 用户表:
- 使用另一个具有足够权限的账户登录 MySQL,然后检查
mysql.user
表,确保root
用户的记录是正确的,并且密码已经被正确设置。 - 可以使用以下命令查看用户:
- 检查防火墙和安全组规则:
- 如果你是从远程位置连接到 MySQL 服务器,确保服务器的防火墙和任何安全组规则都允许你的 IP 地址进行连接。
- 使用 MySQL 安全外壳 (SSH) 隧道:
- 如果你在尝试从远程连接到 MySQL 服务器时遇到问题,考虑使用 SSH 隧道。
如果您提供更具体的信息,比如您的操作系统类型、MySQL 版本以及您尝试连接的方式(命令行工具、图形界面客户端等),我可以给出更具体的建议。