(转)重置密码遇到ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using passwor:yes)问题

本文详细介绍了如何在MySQL中重置root账户密码的步骤,包括修改配置文件跳过密码验证,使用SQL语句更新密码,以及如何恢复正常的密码验证流程。

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

文章转载自:https://www.cnblogs.com/gumuzi/p/5711495.html

一般这个错误是由密码错误引起,解决的办法自然就是重置密码。

假设我们使用的是root账户。

1.重置密码的第一步就是跳过MySQL的密码认证过程,方法如下:

#vim /etc/my.cnf(注:windows下修改的是my.ini)

在文档内搜索mysqld定位到[mysqld]文本段:
/mysqld(在vim编辑状态下直接输入该命令可搜索文本内容)

在[mysqld]后面任意一行添加“skip-grant-tables”用来跳过密码验证的过程,如下图所示:

保存文档并退出


2.接下来我们需要重启MySQL:

/etc/init.d/mysql restart(有些用户可能需要使用/etc/init.d/mysqld restart)

3.重启之后输入mysql即可进入mysql。

 

4.接下来就是用sql来修改root的密码

进入到终端当中,敲入 mysql -u root -p 命令然后回车,当需要输入密码时,直接按enter键,便可以不用密码登录到数据库当中
mysql> update user set password=password("你的新密码") where user="root";
mysql> flush privileges;
mysql> quit

注意:如果在执行该步骤的时候出现ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement 错误。则执行下 flush privileges 命令,再执行该命令即可。

到这里root账户就已经重置成新的密码了。

5.编辑my.cnf,去掉刚才添加的内容,然后重启MySQL。大功告成!

 网上有很多关于这个问题的解决说明,很多刚接触的朋友可能比较迷惑的是在自己的平台上找不到my.cnf或者my.ini文件,如果你是Linux,使用如下方式可以搜索到:

至于windows平台,去安装目录下找一下my.ini吧。

### 解决方案 在 Windows 上遇到 MySQL 登录错误 `ERROR 1045` 的情况通常是因为用户名、密码不匹配或者权限设置不当引起的。以下是详细的解决方案: #### 方法一:重置 root 密码 如果忘记了 root 用户的密码,可以通过以下方法重新设置[^5]。 1. **停止 MySQL 服务** 打开命令提示符(以管理员身份运行),输入以下命令来停止 MySQL 服务: ```cmd net stop mysql ``` 2. **跳过权限表启动 MySQL** 使用 `--skip-grant-tables` 参数启动 MySQL 服务,这样可以绕过权限验证: ```cmd mysqld --shared-memory --skip-grant-tables ``` 3. **登录到 MySQL 并修改密码** 打开另一个命令窗口,执行以下命令进入 MySQL 命令行工具: ```cmd mysql -u root ``` 修改 root 用户的密码(假设新密码为 `new_password`): ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; FLUSH PRIVILEGES; EXIT; ``` 4. **正常重启 MySQL 服务** 关闭之前使用 `--skip-grant-tables` 启动的服务,并通过常规方式启动 MySQL 服务: ```cmd net start mysql ``` #### 方法二:检查用户权限 有时即使提供了正确的用户名和密码,仍然会因为权限不足而无法登录。此时需要确认用户的权限设置是否正确[^4]。 1. 进入 MySQL 数据库并查看当前用户权限: ```sql SHOW GRANTS FOR 'root'@'localhost'; ``` 2. 如果发现权限受限,则可以通过以下语句授予完全权限: ```sql GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; ``` 3. 若希望允许从其他主机访问该数据库实例,可将 `'localhost'` 替换为 `'%'` 或指定的具体 IP 地址: ```sql GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'your_password' WITH GRANT OPTION; FLUSH PRIVILEGES; ``` #### 方法三:检查配置文件 某些情况下可能是由于 MySQL 配置文件中的绑定地址或插件冲突导致的问题[^2]。 1. 编辑 MySQL 配置文件(通常是 `my.ini` 文件),找到 `[mysqld]` 节下的 `bind-address` 设置,默认值可能为 `127.0.0.1`。将其更改为 `0.0.0.0` 来支持外部连接: ```ini bind-address=0.0.0.0 ``` 2. 确认使用的认证插件兼容性。对于较新的版本(如 MySQL 8.x),默认采用 `caching_sha2_password` 插件,这可能导致旧客户端无法连接。可通过更改插件解决此问题: ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_password'; FLUSH PRIVILEGES; ``` --- ### 总结 上述三种方法分别针对忘记密码、权限不足以及配置文件异常的情况提供了解决思路。具体操作时需根据实际情况选择合适的方法处理。 ```python import mysql.connector try: connection = mysql.connector.connect( host='localhost', user='root', password='your_new_password', database='test' ) cursor = connection.cursor() cursor.execute("SELECT VERSION()") result = cursor.fetchone() print(f"MySQL Version: {result[0]}") except Exception as e: print(e) finally: if connection.is_connected(): cursor.close() connection.close() ```
评论 45
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值