【mysql】You must reset your password using ALTER USER statement before executing this statement.


故障现场:登陆到MySQL服务器,不管你执行什么命令都报这个错

mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> use test;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
...
...

怎么会这样呢?难道我进的是假服务器? 发火

原因分析:这个主要是由一个参数控制的 default_password_lifetime,看看官方的解释


仔细看哈,Note信息有时候比上面的信息有用(英文的note我一般都是忽略的,有可能你忽略掉的那部分对性能也有帮助哦)

问题解决:在开源的世界里,我们不怕报错,有报错才有解决思路。下面来看下自己环境里的

mysql> select version();
+--------------+
| version()    |
+--------------+
| 5.7.10-3-log |
+--------------+
1 row in set (0.01 sec)

mysql> show variables like 'default_password_lifetime';
+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| default_password_lifetime | 360     |
+---------------------------+-------+
1 row in set (0.00 sec)


soga,原来如此。那么就修改密码呗

alter user user() identified by "123456";


问题得到成功解决!当前用户可以成功执行权限内的命令。 得意


### 解决 MySQL 中因密码过期导致的 ERROR 1820 问题 当遇到 `ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement` 的错误时,这通常是因为用户的密码过期或从未设置有效密码。以下是针对该问题的具体解决方案。 #### 方法一:通过 SQL 命令重置密码 如果能够成功登录MySQL 数据库,则可以通过执行以下命令来更新密码: ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; ``` 此方法适用于已经可以访问数据库的情况,并且会立即生效[^1]。注意替换 `'new_password'` 为你希望的新密码。 #### 方法二:跳过权限表并手动修改密码 如果无法正常登录MySQL 数据库(例如由于密码未知),则需要采取更复杂的措施。具体操作如下: 1. **停止 MySQL 服务** 使用以下命令停止当前运行的服务: ```bash sudo systemctl stop mysqld ``` 2. **启动 MySQL 跳过授权表验证** 启动 MySQL 并禁用权限检查以便绕过认证过程: ```bash sudo mysqld --user=mysql --skip-grant-tables & ``` 3. **连接至 MySQL 实例** 此时无需提供密码即可进入 MySQL 控制台: ```bash mysql -u root ``` 4. **更新用户密码** 执行以下语句更改根用户的密码: ```sql USE mysql; UPDATE user SET authentication_string=PASSWORD('new_password') WHERE User='root' AND Host='localhost'; FLUSH PRIVILEGES; ``` 这里需要注意的是,在较新的版本中可能不再支持直接调用 `PASSWORD()` 函数;因此建议改用 `IDENTIFIED WITH` 或其他方式完成身份验证字符串配置[^5]。 5. **重启 MySQL 服务** 完成以上步骤之后重新加载默认的安全策略并恢复常规模式下的工作状态: ```bash sudo killall mysqld sudo systemctl start mysqld ``` 此时应该可以用新设定好的凭证再次尝试登陆系统了[^3]。 #### 方法三:利用初始化脚本设置初始密码 对于某些安装包而言,默认情况下会在第一次部署完成后自动生成临时随机密钥存放在日志文件当中。我们只需找到对应记录就能轻松解决问题。 定位路径一般位于 `/var/log/mysqld.log` 文件内部查找关键字 “A temporary password”,然后复制下来作为参数传递给客户端工具实现首次握手交互流程[^4]: ```bash grep 'temporary password' /var/log/mysqld.log ./mysqladmin -u root -p password new_secure_passphrase ``` 最后记得按照官方文档指引尽快调整安全性选项以免遭受外部攻击威胁风险增加。 --- ### 注意事项 - 如果正在使用的 MySQL 版本较高,请确认语法兼容性,因为部分函数已被废弃或者替换成更加安全的形式。 - 修改完毕后务必测试能否正常使用账户功能以及是否符合企业合规标准要求。
评论 31
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值