首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql密码过期,我的mysql.user表已损坏。

问Mysql密码过期,我的mysql.user表已损坏。
EN

Stack Overflow用户
提问于 2017-06-07 22:32:20
回答 2查看 2.8K关注 0票数 4

好吧,我有个小问题。

我的密码过期了,我的users表被破坏了。我可以通过

代码语言:javascript
复制
mysql -u root -p 

但是在我所做的每一个动作中,我都会发现一个错误:

mysql.user的列计数是错误的。预期45,发现46。该表可能已损坏。

我已经读过,您可以使用folowing命令修复mysql.user表:

代码语言:javascript
复制
mysql_upgrade -u root -p 

但是当我这样做的时候,我得到了一个错误:

mysql_upgrade: Got错误:1862年:您的密码过期了。要登录,必须使用支持过期密码的客户端更改它。连接到MySQL服务器时,升级过程遇到错误,不会继续。那我该怎么解决这个问题?

我备份了所有的表,所以如果我必须重置所有的数据库,我就不会有问题了。

(为什么是奇怪的格式?Stackoverflow认为这都是代码,希望我把它放在代码块中,否则我无法保存它)

编辑:

我知道我的密码。这根本不是问题所在。

我的问题是密码过期了,我不能做任何事情,因为我的mysql.user被破坏了!

EN

回答 2

Stack Overflow用户

发布于 2017-06-07 22:45:17

尝试禁用密码过期选项:编辑my.cnf并将

代码语言:javascript
复制
[mysqld]
default_password_lifetime=0

然后尝试重新启动mysql服务器,然后再次登录。源在这里,https://dev.mysql.com/doc/refman/5.7/en/password-expiration-policy.html

为了修复数据库,您可以运行mysqlcheck --repair --databases db_name或mysqlcheck --repair --all-databases来修复所有数据库,源在这里,您可以首先尝试修复数据库,然后尝试禁用密码生存期。

票数 2
EN

Stack Overflow用户

发布于 2021-03-28 14:03:46

在从2018年恢复旧备份时,也有同样的问题,正如您在评论中所说的,重新安装MySQL并没有解决这个问题。

我是怎么做到的

  1. 停止MySQL服务
  2. 运行mysqld_safe --skip-grant-tables --skip-networking & (如果遇到错误,可能需要手动创建和编排目录/run/mysqld) --跳过-授予-表将允许无密码登录,并将禁用密码过期的任何检查。
  3. 现在运行mysql_upgrade --force和mysqlcheck --repair --all-databases
  4. 现在您可以关闭正在运行的mysqld_safe (ps aux | grep mysql用于查找要关闭的PID ),然后使用service mysql start正常启动服务器。 在我的情况下,它没有工作,我仍然有“预期的45,发现46”错误。在这种情况下,请继续:
  5. 再次停止服务器并在安全模式下重新启动它,如上面第2点所示
  6. 现在您应该能够转储内容,但是我们必须排除mysql模式被转储。 因为mysqldump没有--排除-数据库选项,所以我们需要将数据库列表转储。要获取除系统架构之外的现有数据库的列表,请运行: mysql -Nse "SELECT GROUP_CONCAT(SCHEMA_NAME SEPARATOR ' ') FROM information_schema.SCHEMATA WHERE SCHEMA_NAME NOT IN ('mysql','information_schema','performance_schema','sys');"
  7. 从列表中删除不需要的任何其他db,然后运行转储: mysqldump --databases db1 db2 ... db50 > mysqldump.sql
  8. 杀死mysqld,将datadir移开并创建一个空的(mv /var/lib/mysql /var/lib/mysql-old && mkdir /var/lib/mysql && chown mysql:mysql /var/lib/mysql)
  9. service mysql start和一个新的数据集将被填充。
  10. 运行mysql_secure_installation设置新的根密码
  11. 导入转储文件:cat mysqldump.sql | mysql -u root -p

之后,服务器就可以正常运行了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44423804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档