解决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. 使用语句:
`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 将文件导入数据库(load data Statement)
- MySQL 如何将查询结果导出到文件(select … into Statement)
- MySQL Prepared Statement 预处理的操作方法
- MySQL binlog格式之Row和Statement语句详解
- The MySQL server is running with the --read-only option so it cannot execute this statement
- MySQL:Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEM
- 详解JSP中的语句对象Statement操作MySQL的使用实例