我调整了 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
终于解决了!这对我有用:
/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 网站了解更多关于跳过授权的信息
克鲁西卡
mysql 升级文档没有完全提及的另一个标志是:
--force
.在我过去的升级中,一个失败的
/mysql_upgrade -u root -p
命令显示了这个通知:如果
skip-grant-tables
选项失败,就像我在 Mac OS X 上经常发生的那样......最后的手段是强制升级所有表:./mysql_upgrade -u root -p --force
.除此之外
ALTER TABLE
或REPAIR TABLE
之后,确保所有表都完全重建。