IT俱乐部 MySql 解决mysql报错You must reset your password using ALTER USER statement before executing this statement问题

解决mysql报错You must reset your password using ALTER USER statement before executing this statement问题

mysql报错You must reset your password using ALTER USER statement before executing this statement

在 linux 中安装好 MySQL 并完成初始化配置后,使用默认生成的 root 用户密码登录 MySQL 时,可能会出现无法执行任何语句的情况

提示:

「You must reset your password using ALTER USER statement before executing this statement」

这是因为 MySQL 5.7 版本后,用户表的密码字段由 password 改为了 authentication_string,同时增加了一个 password_expired 字段来标识密码是否过期。

对于 root 用户密码过期的情况

通过以下步骤来修改root用户的密码

1. 停止所有的 MySQL 进程。使用命令 `service mysql stop` 或 `killall mysql` 

2. 使用无验证模式启动 MySQL。执行命令 `mysqld_safe –skip-grant-tables`

3. 使用 MySQL 客户端登录无需密码。此时可以执行任何语句。

4. 检查用户表,使用 `select * from mysql.user;`来查看用户详情。

5. 修改 root 用户的密码到期标识和密码。

6. 使用语句:

1
`update mysql.user set authentication_string=password('yourpassword'), password_expired='N' where user='root';`

执行 `flush privileges;`刷新 privileges 表。

查看结果

1
select authentication_string,password_expired from user where user='root';

8. 重新使用正常模式启动 MySQL 服务。执行 `service mysql start`

9. 使用新设置的 root 密码登录 MySQL 客户端进行操作。

以上步骤可以很方便地解决 MySQL 中 root 密码过期无法登录的问题。

重置密码后需要更新整个项目中的连接配置,以确保正常访问数据库。

也可以调整my.cnf

1
2
3
4
5
6
7
8
9
#设置密码过期时间为120天,设为0表示不过期
#default_password_lifetime = 120
default_password_lifetime = 0
#修改密码强度策略,0为低策略
#validate_password_policy=0
#修改密码长度
#validate_password_length=5
#跳过密码校验,无密码登录
#skip-grant-tables

其他报错处理:

ERROR 1805 (HY000): Column count of mysql.user is wrong. Expected 45, found 46. The table is probably corrupted

这个错误表示MySQL的系统权限表mysql.user结构与MySQL服务器预期的不匹配,可能是由于不兼容的升级或错误的操作导致该系统表被破坏。

解决方案有以下几种

1.尝试用mysqld自带的修复模式先修复表结构:

1
mysqld --defaults-file=/etc/my.cnf --skip-grant-tables --user=mysql --skip-networking --safe-mode &

进入安全模式后,执行:

1
2
mysql> USE mysql;
mysql> REPAIR TABLE user;

如果能顺利修复,则重启正常模式的mysqld服务器并登录检查。

2.如果上述修复没有效果

可以尝试重建mysql.user表:

1
mysqldump --add-drop-table --no-data mysql user > user.sql

退出,删除mysql.user表:

1
DROP TABLE mysql.user;

然后重建:

1
SOURCE user.sql;

3.如果以上两种方式仍然无法修复

则可以尝试重新初始化MySQL数据目录:

1
mysqld --defaults-file=/etc/my.cnf --initialize-insecure

这将移除所有数据重新初始化,之后需要重新导入数据。

4.最后的紧急情况下可以选择完全卸载重装MySQL服务器。

在修复过程中务必对现有数据做好备份。

修复表结构本质上是对表重建,如果有数据损坏可能导致部分数据丢失。

如果不行的话,可以考虑用之前的备份重建。

产生这个错误一般是由于MySQL版本升级,权限表结构发生变化,手动操作错误等导致。

我们需要格外小心谨慎操作系统权限表。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。

本文收集自网络,不代表IT俱乐部立场,转载请注明出处。https://www.2it.club/database/mysql/15246.html
上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部