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

Posted

技术标签:

【中文标题】错误 1728 (HY000): 无法从 mysql.user 加载。该表可能已损坏【英文标题】:ERROR 1728 (HY000): Cannot load from mysql.user. The table is probably corrupted 【发布时间】:2017-10-21 03:47:09 【问题描述】:

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

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

原因: 自从我上次通过 phpMyAdmin 创建用户以来,我能想到的唯一可能导致这种情况的事情就是 apt-get 升级。据我所知,所有用户帐户都可以正常工作(测试所有帐户将是一个漫长的过程),并且其他数据库能够正常读取/写入/等

疑难解答:

升级: 我已经尝试过mysql_upgrade,它都报告该表(和所有其他表)都正常,并且需要--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 的定义不正确:预期列 'password_expired' 在位置 41,找到'password_last_changed'。

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

【问题讨论】:

【参考方案1】:

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

我的(不优雅的)解决方案是:

    导出用户 重新排列表格列定义(将password_expiredpassword_last_changed 交换) 导入为user2(只是为了确定) DROP TABLE user;(天哪!) 将user2 复制给用户(谢天谢地!)

【讨论】:

以上是关于错误 1728 (HY000): 无法从 mysql.user 加载。该表可能已损坏的主要内容,如果未能解决你的问题,请参考以下文章

Ubuntu 17.10 - ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysq

mysql错误:错误1018(HY000):无法读取'.'的目录(错误号:13)

MySql:错误 1018(HY000):无法读取 '.' 的目录(错误号:13)

连接错误 - SQLSTATE [HY000] [2002]操作超时

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysq

MySQL 错误 [1215] [HY000] - 无法添加外键 [重复]