错误1728(HY000):无法从mysql.user加载。该表可能已损坏

时间:2017-05-21 12:13:25

标签: mysql ubuntu phpmyadmin

症状:我刚刚尝试创建一个用户,就像我过去做过很多次一样,只是为了收到这个错误:

  

错误1728(HY000):无法从mysql.user加载。表可能是   损坏

原因: 自从我上次通过phpMyAdmin创建一个可能导致这个问题的用户以来,我能想到的唯一一件事就是apt-get升级。至于我可以告诉所有用户帐户工作正常(测试所有将是一个漫长的过程)和其他数据库能够读/写/等精细

排除故障:

升级: 我已经尝试mysql_upgrade,它们都会将该表(以及所有其他表)报告为OK,并且需要--force选项。我已完成apt-get upgrade dist并重新启动(之后是另一个mysql_upgrade - 嘿,为什么不这样做)问题仍然存在。

权限: 我已验证/var/lib/mysql以南的所有文件中的权限是mysql:root rw:rw: - (最初是mysql组,但只有用户可见)包括/var/lib/mysql-files(空) /var/lib/mysql-keyring(一个文件)和/var/lib/mysql-upgrade(一个文件)

用户: 我有两个root用户(不同的名称,几乎相同的权限),并且都显示对mysql.user的完全访问权限(显示并且能够快速完成 - 尽管完整编辑缺少BLOB文件,这可能是问题吗? )通过phpMyAdmin。

创建用户方法: 使用CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';时遇到同样的错误,通过phpMyAdmin尝试 - 通过我的root帐户

此时我很难重新安装MySQL或者甚至是Ubuntu的堆栈溢出,而我看到的最接近的文章是mysql.proc(它没有工作)

更新日志显示:

  

[警告]表mysql.user:expected列的定义不正确   ' password_expired'在第41位,发现' password_last_changed'。

     

[ERROR] / usr / sbin / mysqld:无法从mysql.user加载。表是   可能已损坏

1 个答案:

答案 0 :(得分:4)

即使重新运行mysql_upgrade后,用户的列仍然是错误的顺序!

我不太优雅的解决方案是:

  1. 导出用户
  2. 重新排列表列定义(用password_last_changed交换password_expired)
  3. 导入为user2(只是为了确定)
  4. DROP TABLE用户; (哦,我的!)
  5. 将user2复制到用户(谢天谢地,它有效!)