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

 更新时间:2024年11月21日 15:47:40   作者:蜗牛去旅行吧  
文章介绍了在Linux系统中解决MySQL 5.7及以上版本root用户密码过期无法登录的问题方法,以及如何处理系统权限表mysql.user结构错误的问题

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. 使用语句:

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

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

查看结果

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

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

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

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

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

也可以调整my.cnf

#设置密码过期时间为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自带的修复模式先修复表结构:

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

进入安全模式后,执行:

mysql> USE mysql;
mysql> REPAIR TABLE user;

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

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

可以尝试重建mysql.user表:

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

退出,删除mysql.user表:

DROP TABLE mysql.user;

然后重建:

SOURCE user.sql;

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

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

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

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

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

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

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

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

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

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

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的用法解读

    MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的用法解读

    这篇文章主要介绍了MySQL中IF()、IFNULL()、NULLIF()、ISNULL()函数的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2025-06-06
  • 以数据库字段分组显示数据的sql语句(详细介绍)

    以数据库字段分组显示数据的sql语句(详细介绍)

    本篇文章是对以数据库字段分组显示数据的sql语句进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  • MySQL存储IP地址的三种方法

    MySQL存储IP地址的三种方法

    在MySQL中,存储IP地址通常有几种推荐的方法,每种方法都有其优缺点,可以根据具体需求选择合适的方式,本文给大家介绍了MySQL存储IP地址的三种方法:使用VARCHAR类型,使用INT类型存储IPv4和使用BINARY(16)或VARBINARY(16)存储IPv6,需要的朋友可以参考下
    2024-07-07
  • MySQL数据库操作DML 插入数据,删除数据,更新数据

    MySQL数据库操作DML 插入数据,删除数据,更新数据

    这篇文章主要介绍了MySQL数据库操作DML插入数据,删除数据,更新数据,DML是指数据操作语言,英文全称是Data Manipulation Language,用来对数据库中表的数据记录进行更新
    2022-07-07
  • mysql数据库navicat数据同步时误删除部分数据的解决

    mysql数据库navicat数据同步时误删除部分数据的解决

    本文主要介绍了mysql数据库navicat数据同步时误删除部分数据,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-04-04
  • MySQL5.7限制general_log日志大小的实现

    MySQL5.7限制general_log日志大小的实现

    MySQL5.7.41中为避免通用查询日志general_log快速增长占用硬盘空间,可以通过定时任务执行脚本进行每日备份或清理,从而限制其大小,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-10-10
  • 详解Windows10下载mysql的教程图解

    详解Windows10下载mysql的教程图解

    本文通过图文并茂的形式给大家介绍了Windows10下载mysql的方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-08-08
  • Mysql事务隔离级别原理实例解析

    Mysql事务隔离级别原理实例解析

    这篇文章主要介绍了Mysql事务隔离级别原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • MySQL实现分布式锁的三种主流方案

    MySQL实现分布式锁的三种主流方案

    MySQL 实现分布式锁的核心是利用数据库的原子性、唯一性约束或行级锁机制,保证分布式系统中多个节点对共享资源的互斥访问,解决跨进程、跨服务器的并发竞争问题,以下是三种主流、可靠且覆盖不同业务场景的实现方案,需要的朋友可以参考下
    2026-02-02
  • 利用frm和ibd文件恢复mysql表数据的详细过程

    利用frm和ibd文件恢复mysql表数据的详细过程

    总是遇到mysql服务意外断开之后导致mysql服务无法正常运行的情况,使用Navicat工具查看能够看到里面的库和表,但是无法获取数据记录,提示数据表不存在,所以本文给大家介绍了利用frm和ibd文件恢复mysql表数据的详细过程,需要的朋友可以参考下
    2024-04-04

最新评论