mysql 日常报错问题 ERROR 1820 (HY000): You must reset your password

本文介绍了如何在MySQL中重置root用户的密码,并通过SQL命令设置密码永不过期。首先,通过--skip-grant-tables启动MySQL,然后使用ALTER USER命令更新密码并设置EXPIRE NEVER属性。

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

原因:密码过期,重置密码设置不过期。

解决办法:

mysql> SET PASSWORD = PASSWORD('password123!');

 

mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;

 

处理过程:

E:\mysql-5.7.19>mysqld --skip_grant_tables;

E:\mysql-5.7.19>mysql -u root -p
Enter password: ***
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 5.7.19

Copyright (c) 2000, 2017, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>  alter user 'root'@'localhost'password expire never
    -> ;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
mysql> ALTER USER ‘root’@‘localhost’ IDENTIFIED BY ‘root’ PASSWORD EXPIRE NEVER;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '‘root’ PASSWORD EXPIRE NEVER' at line 1
mysql> SET PASSWORD = PASSWORD('password123!');
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
Query OK, 0 rows affected (0.01 sec)

mysql>

 

<think>我们面对的是MySQL安装后首次登录时遇到的ERROR 1820问题。根据引用内容,该错误提示在执行任何操作前必须用ALTER USER语句重置密码。 综合多个引用,解决方案的核心是修改root用户的密码。但需要注意,在修改密码时可能会遇到密码策略问题(如ERROR 1819),此时需要调整密码策略。 步骤分解: 1. 登录MySQL:使用安装时生成的临时密码或空密码登录(根据安装方式不同,可能不同)。 2. 修改密码:使用ALTER USER或SET PASSWORD语句修改密码。 3. 若遇到密码策略问题,则调整策略(降低策略等级或增加密码长度要求)后再修改密码。 4. 刷新权限。 根据引用[2]和[3],有两种修改密码的方法:ALTER USER和SET PASSWORD。但引用[4]提到使用ALTER USER,并且还提供了处理密码策略错误的方法。 因此,我们给出详细步骤: 步骤1:使用临时密码登录MySQL(如果安装时生成了临时密码,请使用它登录)。如果不知道密码,可能需要查看日志文件(如/var/log/mysqld.log)或使用其他方式获取初始密码。 步骤2:登录后,执行修改密码的命令。但注意,此时执行任何命令都会报ERROR 1820,所以必须先修改密码。 引用[2]和[3]提供了两种方法: 方法1:ALTER USER mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password'; 方法2:SET PASSWORD(在MySQL 5.7中可用,但8.0中可能已弃用) mysql> SET PASSWORD = PASSWORD('new_password'); 但更推荐使用ALTER USER,因为它是更现代的方式。 步骤3:如果设置的密码过于简单,可能会遇到ERROR 1819,这时需要调整密码策略(如引用[4]所述): mysql> set global validate_password_policy=LOW; # 设置密码策略为低 mysql> set global validate_password_length=6; # 设置密码最小长度(根据需求调整) 然后再执行修改密码的命令。 步骤4:修改密码后,刷新权限(虽然修改密码通常会自动刷新权限,但为了保险可以执行): mysql> FLUSH PRIVILEGES; 注意:新密码需要满足调整后的策略要求。 另外,引用[4]提到使用`ALTER USER USER() IDENTIFIED BY 'password';`,其中USER()函数返回当前用户,这样就不需要指定用户名和主机。 因此,我们可以给出两种方案(方案一为没有遇到密码策略错误的情况,方案二为遇到密码策略错误时的处理)。 方案一(直接修改密码): 1. 登录MySQL:`mysql -u root -p` (输入初始密码,如果没有则直接回车) 2. 修改密码:`ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password';` 3. 退出并重新登录。 方案二(遇到密码策略错误时): 1. 登录MySQL。 2. 设置密码策略为LOW并设置密码长度(例如6): mysql> set global validate_password_policy=LOW; mysql> set global validate_password_length=6; 3. 修改密码:`ALTER USER 'root'@'localhost' IDENTIFIED BY 'your_new_password';` 4. 刷新权限:`FLUSH PRIVILEGES;` 5. 退出并重新登录。 注意:在MySQL 5.7中,validate_password插件默认安装,所以会有密码策略。如果不想使用,也可以卸载该插件,但这样会降低安全性。 另外,如果修改密码后仍然报错,可能是因为修改密码的语句没有正确执行,或者没有刷新权限。另外,确保修改的是当前登录用户的密码。 如果用户是远程登录(如不是localhost),可能需要修改'root'@'%',但通常首次安装都是localhost。 最后,根据引用[4],如果使用ALTER USER USER(),则可以避免写用户名和主机,因为USER()返回当前用户。所以可以这样写: mysql> ALTER USER USER() IDENTIFIED BY 'your_new_password'; 这样更通用。 因此,我们给出一个通用的步骤: 1. 登录MySQL。 2. 执行:`ALTER USER USER() IDENTIFIED BY 'your_new_password';` 3. 如果遇到密码策略错误,则先设置策略: set global validate_password_policy=LOW; set global validate_password_length=6; 然后再次执行ALTER USER。 4. 刷新权限:`FLUSH PRIVILEGES;` 然后就可以正常使用了。 注意:密码需要符合策略要求(在调整策略后,至少6位,且为LOW策略时只需长度满足即可)。 另外,如果用户安装的是MySQL 8.0,步骤类似,但密码策略的变量名可能有变化(在8.0中,变量名是validate_password.policy,但在5.7中是validate_password_policy)。但根据引用,用户使用的是5.7(引用[3]提到Server version: 5.7.11)。 因此,我们按照5.7的语法。 最后,请用户根据实际情况替换'your_new_password'为实际密码。 相关问题: 1. 如何查看MySQL的初始临时密码? 2. 修改MySQL密码有哪些方法? 3. 如何永久卸载validate_password插件? 4. 在MySQL 8.0中解决ERROR 1820的方法有什么不同? 根据以上分析,我们给出回答。</think>### MySQL ERROR 1820 (HY000) 解决方案 当在Linux系统安装MySQL后首次登录时,若遇到错误提示: ```sql ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement ``` 这表明MySQL要求**首次登录必须立即修改密码**。以下是完整解决步骤: --- #### 步骤1:使用初始密码登录MySQL ```bash mysql -u root -p # 输入安装时生成的临时密码(可在/var/log/mysqld.log中查找"temporary password") ``` #### 步骤2:修改root用户密码(核心操作) ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword123!'; ``` > ⚠️ **注意**:如果出现密码策略错误: > ```sql > ERROR 1819 (HY000): Your password does not satisfy the current policy requirements > ``` > 需先调整密码策略(见步骤3) --- #### 步骤3:处理密码策略错误(若出现) ```sql -- 降低密码强度策略(LOW=仅需长度≥8) SET GLOBAL validate_password_policy = LOW; -- 设置密码最小长度(可选) SET GLOBAL validate_password_length = 8; -- 再次执行密码修改 ALTER USER 'root'@'localhost' IDENTIFIED BY 'simple123'; ``` --- #### 步骤4:刷新权限并验证 ```sql FLUSH PRIVILEGES; -- 刷新系统权限 SHOW DATABASES; -- 验证是否可正常执行命令 ``` 成功后将显示数据库列表,不再报错。 --- #### 关键说明 1. **必须使用`ALTER USER`** 其他命令(如`SET PASSWORD`)可能无效,这是MySQL的安全机制要求[^2][^3] 2. **密码复杂度要求** MySQL 5.7+默认启用密码策略,建议密码包含: - 大写字母、小写字母、数字、特殊符号 - 长度≥8位(可通过`validate_password_length`调整) 3. **远程用户需指定主机** 如远程登录用户:`ALTER USER 'root'@'%' IDENTIFIED BY '...'` --- #### 附:密码策略查看命令 ```sql SHOW VARIABLES LIKE 'validate_password%'; ``` 输出示例: ``` +--------------------------------------+-------+ | Variable_name | Value | +--------------------------------------+-------+ | validate_password_check_user_name | OFF | | validate_password_length | 8 | | validate_password_mixed_case_count | 1 | | validate_password_policy | LOW | +--------------------------------------+-------+ ``` 通过以上步骤即可解决ERROR 1820问题,并正常使用MySQL[^1][^4]。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值