编程经验:mysql reset root password

 

//************************************************

#停止mysql服务,以及启动mysql 时不启动grant-tables(授权表)

C:\Program Files\MySQL\MySQL Server 5.5\bin>net stop mysql

MySQL 服务正在停止..

MySQL 服务已成功停止。

C:\Program Files\MySQL\MySQL Server 5.5\bin>mysqld --skip-grant-tables

 

//************************************************

#另开一个cmd命令行,不需要密码

C:\Program Files\MySQL\MySQL Server 5.5\bin>mysql -uroot

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1

Server version: 5.5.5-m3 MySQL Community Server (GPL)

 

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

This software comes with ABSOLUTELY NO WARRANTY. This is free software,

and you are welcome to modify and redistribute it under the GPL v2 license

 

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

#重置mysqlroot用户密码

mysql> update mysql.user set password=password('root') where user='root';

Query OK, 2 rows affected (0.77 sec)

Rows matched: 2  Changed: 2  Warnings: 0

 

mysql> flush privileges;

Query OK, 0 rows affected (0.39 sec)

 

mysql>\q

 

//************************************************

#命令行Mysql数据库操作

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| mysql              |

| performance_schema |

| test               |

+--------------------+

4 rows in set (0.00 sec)

 

mysql> CREATE DATABASE `ework` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

Query OK, 1 row affected (0.08 sec)

 

mysql> show databases;

+--------------------+

| Database           |

+--------------------+

| information_schema |

| ework              |

| mysql              |

| performance_schema |

| test               |

+--------------------+

5 rows in set (0.00 sec)

 

mysql> use ework;

Database changed

mysql> show tables;

+--------------------------+

| Tables_in_ework          |

+--------------------------+

| jbpm4_deployment         |

| jbpm4_deployprop         |

| jbpm4_execution          |

…|

| v_processview            |

| v_processview_task       |

+--------------------------+

131 rows in set (0.05 sec)

 

<think>我们面对的是MySQL的ERROR 1820 (HY000)错误,提示用户必须先用ALTER USER语句重置密码。根据引用内容,这个错误通常发生在密码过期策略生效时,或者新安装MySQL后首次登录时要求修改密码。 引用[1]和[2]提供了解决方案,但需要注意MySQL版本差异: - 对于MySQL 5.7.6及以上版本,使用ALTER USER语句修改密码。 - 对于MySQL 5.7.6以下版本,使用SET PASSWORD语句(但注意,在MySQL 8.0中,SET PASSWORD的语法也有所改变,且推荐使用ALTER USER)。 然而,从错误信息看,用户已经能够登录(尽管执行语句受限),所以我们需要指导用户在登录后立即修改密码。 步骤: 1. 使用root用户登录MySQL(如果当前有密码,则带上密码)。 2. 执行修改密码的语句(根据版本选择合适语句)。 但是,用户可能不知道自己的MySQL版本,因此我们可以提供通用方法,并同时给出针对不同版本的说明。 另外,引用[3]也提到了同样的错误,但没有给出具体方案,所以我们主要参考[1]和[2]。 具体步骤: 步骤1:登录MySQL ```bash mysql -u root -p ``` 输入当前密码(如果不知道密码,可能需要先重置密码,但这里错误是1820,说明已经登录成功,只是需要修改密码) 步骤2:修改密码(需要区分版本) 然而,在不知道版本的情况下,我们可以尝试使用ALTER USER语句(因为从MySQL 5.7.6开始,官方推荐使用ALTER USER,且MySQL 8.0也支持)。如果版本低于5.7.6,则使用SET PASSWORD。 但注意:在MySQL 8.0中,密码插件有变化,默认使用caching_sha2_password,而旧版本使用mysql_native_password。如果使用旧版本客户端连接,可能需要指定插件。 因此,我们提供两种方案: 方案A(MySQL 5.7.6及以上版本,包括8.0): ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; ``` 方案B(MySQL 5.7.6以下版本): ```sql SET PASSWORD FOR 'root'@'localhost' = PASSWORD('你的新密码'); ``` 但是,由于错误提示要求使用ALTER USER,所以很可能用户使用的是5.7.6或更新版本。因此,优先尝试方案A。 另外,如果用户是在MySQL 8.0上,且想要兼容旧的认证插件,可以这样: ```sql ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码'; ``` 步骤3:刷新权限(虽然通常修改用户密码后会自动刷新,但为了保险): ```sql FLUSH PRIVILEGES; ``` 步骤4:退出并重新登录,测试新密码。 注意:新密码需要符合密码策略(包括长度、大小写、数字和特殊字符等),否则可能修改不成功。如果密码策略不允许简单密码,可以临时修改密码策略,但这里不展开。 如果用户遇到密码策略问题,可以暂时降低策略要求(需有权限): ```sql SET GLOBAL validate_password.policy = LOW; -- MySQL 5.7 SET GLOBAL validate_password.policy = 0; -- MySQL 8.0中,0表示LOW ``` 然后再修改密码。 但是,修改密码策略需要权限,而用户当前处于必须修改密码的状态,可能无法执行其他语句。因此,如果因为密码过于简单而修改失败,只能设置一个符合要求的密码。 如果用户忘记了root密码,则需要采用跳过权限表的方式启动MySQL(即安全模式),然后重置密码。但本问题中用户已经登录,所以不需要。 总结操作步骤(假设版本>=5.7.6): 1. 登录:`mysql -u root -p` 2. 输入当前密码(能够登录但遇到1820错误) 3. 执行:`ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPassword123!';`(注意替换密码) 4. 退出:`exit` 5. 重新登录:`mysql -u root -p` 输入新密码 如果用户不确定自己的用户账户(可能是'root'@'localhost'或'root'@'%'等),可以查看: ```sql SELECT USER(), CURRENT_USER(); ``` 然后根据实际用户和主机名修改。 另外,如果用户账户不是root,替换相应的用户名和主机名。 相关问题: 1. 如何进行MySQL密码策略的配置? 2. 如何在MySQL中查看当前用户和权限? 3. 如何处理MySQL密码过期问题? 4. MySQL不同版本密码管理有哪些差异? 注意:在回答中,我们引用了站内引用[1]和[2],因此在末尾需要添加引用标识。 </think>### 解决MySQL ERROR 1820 (HY000) 密码重置问题 #### 📝 错误原因分析 当MySQL出现 `ERROR 1820 (HY000): You must reset your password using ALTER USER statement` 错误时,通常由以下原因导致: 1. **密码过期策略触发**:MySQL默认启用密码过期策略(尤其8.0+版本) 2. **首次登录未改密码**:新安装MySQL后使用临时密码首次登录未立即修改 3. **安全策略强化**:MySQL 5.7.6+ 加强了密码安全要求[^1][^2] #### 🔧 分步解决方案 (MySQL 5.7.6+ 和 8.0) ##### 步骤1:登录MySQL ```bash mysql -u root -p # 输入当前密码(临时密码或旧密码) ``` ##### 步骤2:重置密码(根据版本选择) ```sql /* MySQL 5.7.6+ 和 8.0 通用方案 */ ALTER USER 'root'@'localhost' IDENTIFIED BY 'YourNewPassword1!'; ``` > **注意**:新密码需满足复杂度要求(大小写字母+数字+符号,长度≥8) ##### 步骤3:刷新权限 ```sql FLUSH PRIVILEGES; ``` ##### 步骤4:验证密码修改 ```sql SHOW DATABASES; -- 应正常显示数据库列表 ``` #### ⚠️ 特殊情况处理 **场景1:MySQL < 5.7.6 版本** ```sql SET PASSWORD = PASSWORD('YourNewPassword1!'); ``` **场景2:忘记当前密码** 1. 停用服务: ```bash sudo systemctl stop mysql ``` 2. 跳过权限启动: ```bash sudo mysqld_safe --skip-grant-tables --skip-networking & ``` 3. 无密码登录后重置: ```sql UPDATE mysql.user SET authentication_string=PASSWORD('NewPass123!') WHERE User='root'; FLUSH PRIVILEGES; ``` 4. 重启服务验证 #### 🔐 预防再次发生 1. **查看密码策略**: ```sql SHOW VARIABLES LIKE 'default_password_lifetime'; ``` - 值为 `0` 表示永不过期 - 值为 `N` 表示每 N 天过期 2. **永久禁用密码过期**: ```sql ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; ``` 3. **修改全局策略** (需权限): ```sql SET GLOBAL default_password_lifetime = 0; -- 配置文件需同步修改 ``` #### ⚡ 操作示例流程 ```mermaid graph TD A[登录MySQL] --> B{版本≥5.7.6?} B -- Yes --> C[ALTER USER 改密] B -- No --> D[SET PASSWORD 改密] C --> E[FLUSH PRIVILEGES] D --> E E --> F[验证执行SHOW DATABASES] F --> G[成功解决ERROR 1820] ``` > **关键提示**: > - MySQL 8.0 强制要求首次登录后立即修改密码 > - 生产环境建议保留密码过期策略(周期设为180-365天) > - 使用 `mysql_config_editor` 配置安全登录路径避免密码暴露[^1]
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值