**症状:**我刚尝试创建用户,就像我过去多次做的那样,却收到以下错误:
错误1728(HY 000):无法从mysql. user加载。该表可能已损坏
**原因:**自从上次通过phpMyAdmin创建用户以来,我所能想到的唯一可能导致此问题的操作是apt-get升级。据我所知,所有用户帐户都工作正常(测试所有帐户将是一个漫长的过程),其他数据库能够正常读取/写入/等
故障排除:
**upgrade:**我已经尝试了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
(一个文件)
**users:**我有两个root用户(不同的名字,几乎相同的权限),他们都显示了对mysql.user的完全访问权限(显示并能够快速编辑--尽管完整的编辑缺少BLOB文件,这是问题所在吗?)
**创建用户方法:**我在使用CREATE USER 'user'@'localhost' IDENTIFIED BY 'password';
时遇到的错误与尝试通过phpMyAdmin时遇到的错误相同-通过我的两个root帐户
目前,我对重新安装MySQL甚至Ubuntu感到非常害羞,我看到的最接近的文章是关于mysql.proc的(这些文章都不起作用)
更新日志显示:
[警告]表mysql.user的定义不正确:位置41处应为列“password_expired”,但找到“password_last_changed”。
[错误] /usr/sbin/mysqld:无法从mysql. user加载。该表可能已损坏
1条答案
按热度按时间gv8xihay1#
即使在重新运行
mysql_upgrade
之后,user列的顺序仍然错误。我的(不雅的)解决方案是:
1.导出用户
1.重新排列表列定义(将
password_expired
与password_last_changed
交换)1.导入为
user2
(只是为了确保)DROP TABLE user;
(天哪!)1.将
user2
复制给用户(谢天谢地,它成功了!)