mysql安装过程中出现错误 ERROR 1820 (HY000): You must SET PASSWORD before executing this statement

本文提供了一种解决MySQL登录时出现权限拒绝错误的方法。通过停止MySQL服务并以安全模式启动,更新root用户的密码,最后重启服务即可解决问题。
最近新装好的mysql在进入mysql工具时,总是有错误提示:
# mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
或者
# mysql -u root -p password 'newpassword'
Enter password:
mysqladmin: connect to server at 'localhost' failed
error: 'Access denied for user 'root'@'localhost' (using password: YES)'

现在终于找到解决方法了。本来准备重装的,现在不必了。
方法操作很简单,如下:
# /etc/init.d/mysql stop
# mysqld_safe --user=mysql --skip-grant-tables --skip-networking &
# mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('newpassword') where USER='root' and host='root' or host='localhost';//把空的用户密码都修改成非空的密码就行了。
mysql> FLUSH PRIVILEGES;
mysql> quit # /etc/init.d/mysqld restart
# mysql -uroot -p

Enter password: <输入新设的密码newpassword>



MySql5.6操作时报错:You must SET PASSWORD before executing this statement解决

mysql>  SET PASSWORD = PASSWORD('123456');
Query OK, 0 rows affected (0.03 sec)

mysql> create database roger;
Query OK, 1 row affected (0.00 sec)

也就是用mysql>  SET PASSWORD = PASSWORD('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 版本较高,请确认语法兼容性,因为部分函数已被废弃或者替换成更加安全的形式。 - 修改完毕后务必测试能否正常使用账户功能以及是否符合企业合规标准要求。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值