mysql ERROR 1045 (28000): Access denied for user解决方法

本文提供了解决MySQL环境下的错误提示 'Access denied for user' 的步骤,包括修改配置文件my.ini,临时开启skip-grant-tables模式以无密码登录,设置新密码,刷新权限并最终安全地恢复系统。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题重现(以下讨论范围仅限Windows环境):

C:\AppServ\MySQL> mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user
'root'@'localhost' (using password: YES)

 

编辑mysql配置文件my.ini(不知道在哪请搜索),在[mysqld]这个条目下加入
  skip-grant-tables
保存退出后重启mysql

1.点击“开始”->“运行”(快捷键Win+R)。

  2.启动:输入 net stop mysql

  3.停止:输入 net start mysql


这时候在cmd里面输入mysql -u root -p就可以不用密码登录了,出现password:的时候直接回车可以进入,不会出现ERROR 1045 (28000),但很多操作都会受限制,因为我们不能grant(没有权限)。按下面的流程走(红色部分为输入部分,粉红色的是执行后显示的代码不用输入):

1.进入mysql数据库:

mysql> use mysql;
Database changed

2.给root用户设置新密码,蓝色部分自己输入:
mysql> update user set password=password("新密码") where user="root";
Query OK, 1 rows affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0

3.刷新数据库
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

4.退出mysql:
mysql> quit
Bye

改好之后,再修改一下my.ini这个文件,把我们刚才加入的"skip-grant-tables"这行删除,保存退出再重启mysql就可以了。





<think>好的,我现在需要帮助用户解决MySQL在Linux上遇到的1045错误,也就是访问被拒绝的问题。首先,我得回顾一下用户提供的引用内容,看看里面有哪些有用的信息。用户引用了几个关于MySQL 1045错误的解决方案,包括Windows和Node.js的情况,但用户现在是在Linux环境下遇到这个问题,可能需要调整方法。 首先,用户提到的错误通常是认证问题,可能是密码错误、权限问题或者用户不存在。根据引用3,提到在Windows下可以无密码登录,但Linux下可能有类似的情况吗?可能需要检查用户是否有权限,或者密码是否正确。 接下来,我需要整理解决步骤。根据引用中的信息,可能的解决方法包括重置密码、检查用户权限、修改认证插件等。比如引用2提到可能需要修改root用户的认证方式,特别是MySQL 8.0之后默认使用caching_sha2_password,而旧客户端可能不支持,导致连接问题。用户如果是用旧版本的客户端连接,可能需要将插件改为mysql_native_password。 另外,引用3中提到在Windows下删除mysqld文件,但这可能不适用于Linux。不过Linux下可能需要停止MySQL服务,然后以跳过权限检查的方式启动,来重置密码,这是常见的解决方法。 还要考虑用户是否有正确的host设置,比如用户是否被允许从localhost访问,或者是否需要创建用户并授权,如引用1中的例子,可能需要检查用户是否存在,以及权限是否正确分配。 可能还需要检查MySQL的配置文件,比如my.cnf,确认是否有绑定地址的限制,或者是否启用了跳过授权表的选项,以便临时修复问题。 最后,用户可能需要更新密码或者重新赋予权限,确保密码正确,并且用户有从指定主机访问的权限。例如,在引用4中,Node.js连接时密码错误导致的问题,所以确认密码是否正确也很重要。 总结步骤应该是: 1. 确认用户名和密码是否正确输入。 2. 检查用户是否存在以及权限设置。 3. 尝试重置密码,可能需要以安全模式启动MySQL。 4. 修改用户的认证插件类型。 5. 检查MySQL的配置文件是否有特殊设置。 6. 确保MySQL服务正常运行,端口开放。 现在需要把这些步骤详细地用中文写出来,结构清晰,并生成相关问题。同时注意引用对应的参考资料,比如当提到修改认证插件时引用2和3,提到重置密码时引用3和5的方法,可能需要进行调整适用到Linux环境。</think>### 解决MySQL Linux环境ERROR 1045访问被拒绝的步骤 #### 1. **确认用户名与密码正确性** - 检查连接命令中的用户名和密码是否正确,例如: ```bash mysql -u 用户名 -p ``` 输入后需确保密码无误。若密码含特殊字符,需用引号包裹(如`'password'`)[^4][^1]。 #### 2. **验证用户权限及存在性** -root权限登录后,检查用户是否被正确创建: ```sql SELECT user, host FROM mysql.user; ``` 若用户不存在,需执行: ```sql CREATE USER '用户名'@'localhost' IDENTIFIED BY '密码'; GRANT ALL PRIVILEGES ON *.* TO '用户名'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; ``` [^3] #### 3. **重置MySQL root密码(需管理员权限)** - **步骤:** 1. 停止MySQL服务: ```bash sudo systemctl stop mysql ``` 2. 启动MySQL并跳过权限验证: ```bash sudo mysqld_safe --skip-grant-tables & ``` 3. 无密码登录MySQL: ```bash mysql -u root ``` 4. 更新root密码(MySQL 5.7+): ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; FLUSH PRIVILEGES; ``` 5. 重启MySQL服务: ```bash sudo systemctl restart mysql ``` [^3][^5] #### 4. **修改用户认证插件(针对MySQL 8.0+)** - MySQL 8.0默认使用`caching_sha2_password`,旧客户端可能不兼容。修改为`mysql_native_password`: ```sql ALTER USER '用户名'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码'; FLUSH PRIVILEGES; ``` [^2] #### 5. **检查配置文件`my.cnf`** - 确保配置文件(通常位于`/etc/mysql/my.cnf`)中未限制访问: ```ini [mysqld] bind-address = 0.0.0.0 # 允许所有IP连接 skip-grant-tables # 临时跳过权限验证(慎用) ``` 修改后重启服务: ```bash sudo systemctl restart mysql ``` #### 6. **验证网络与端口** - 确认MySQL服务监听端口(默认3306)是否开放: ```bash sudo netstat -tuln | grep 3306 ``` 若未监听,检查服务状态: ```bash sudo systemctl status mysql ``` [^4] --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值