致命错误:mysql.user 表已损坏。请运行 mysql_upgrade

致命错误:mysql.user 表已损坏。请运行 mysql_upgrade

我调整了 Azure VM 的大小,现在 VM 内 Windows 中运行的 MySQL DB 已死机。启动时我看到以下致命错误。我尝试按照提示运行 mysql_upgrade,但只是显示无法连接的错误。有人知道如何修复这个问题吗?

2016-07-12T09:59:48.426367Z 0 [Note] Server hostname (bind-address): '*'; port: 3306
2016-07-12T09:59:48.426367Z 0 [Note] IPv6 is available.
2016-07-12T09:59:48.426367Z 0 [Note]   - '::' resolves to '::';
2016-07-12T09:59:48.426367Z 0 [Note] Server socket created on IP: '::'.
2016-07-12T09:59:48.426367Z 0 [Note] Shared memory setting up listener
2016-07-12T09:59:48.438315Z 0 [Note] InnoDB: Loading buffer pool(s) from C:\ProgramData\MySQL\MySQL Server 5.7\Data\ib_buffer_pool
2016-07-12T09:59:48.455584Z 0 [Note] InnoDB: Buffer pool(s) load completed at     160712  9:59:48
2016-07-12T09:59:48.455584Z 0 [ERROR] Fatal error: mysql.user table is     damaged. Please run mysql_upgrade.
2016-07-12T09:59:48.455584Z 0 [ERROR] Aborting

答案1

终于解决了!这对我有用:/etc/init.d/mysqld start --skip-grant-tables && mysql_upgrade

升级成功后,您可以执行以下操作:/etc/init.d/mysqld restart 或者,您可以单独停止和启动 mysqld。

从昨天开始我就被 Centos 6 上的 mysql 错误所困扰。

如果您在系统上安装了不同版本的 mysql,而系统上已经安装了另一个版本的 mysql,那么这确实可以节省您的时间。在这种情况下,很可能会出现不同类型的错误。

--skip-grant-tables 可以帮你摆脱这种情况。如果你有安全方面的顾虑,请检查以下内容:关联如何安全地使用此选项。

有关--skip-grant-tables的更多详细信息: 这使得任何人都可以无需密码并拥有所有权限进行连接,并禁用诸如 ALTER USER 和 SET PASSWORD 之类的帐户管理语句。来源:点击此处从 mysql 官方网站了解有关 skip grant 的更多信息

克鲁蒂卡

答案2

另一面旗帜mysql 升级文档没有完全提到,是:--force

在我过去的升级中,失败的/mysql_upgrade -u root -p命令显示此通知:

此 MySQL 安装已升级,如果仍需要运行 mysql_upgrade,请使用 --force

如果该skip-grant-tables选项失败,就像我经常在 Mac OS X 上遇到的情况一样...最后的办法是使用以下命令强制升级所有表:./mysql_upgrade -u root -p --force

除此之外ALTER TABLEREPAIR TABLE之后,确保所有表都已完全重建。

相关内容