由于以上答案均未真正解释发生的情况,因此我决定加入讨论,并为该问题提供更多详细信息。
是的,解决方案是运行如下所示的MySQL Upgrade命令:mysql_upgrade -u root -p --force
,但是发生了什么?
造成此问题的根本原因是的损坏performance_schema
,原因可能是:
- 自然损坏(卷出现kaboom,引擎错误,内核驱动程序问题等)
- mysql修补程序期间损坏(在mysql修补程序中发生这种情况并非罕见,特别是对于主要版本升级而言)
- 一个简单的“删除数据库performance_schema”显然会导致此问题,并且会表现出与损坏一样的症状。
这个问题甚至在补丁发布之前就已经存在于您的数据库中,但是在MySQL 5.7.8上发生的特别是该标志show_compatibility_56
将其默认值从默认设置更改ON
为OFF
。该标志控制引擎在各种MySQL版本上查询设置和读取变量(会话和全局)的行为。
因为MySQL 5.7+开始读取并存储这些变量,performance_schema
而不是on information_schema
,所以ON
在第一个发行版中引入了此标志,以减小此更改的爆炸半径,并让用户了解该更改并习惯该更改。
可以,但是为什么连接失败?因为取决于所使用的驱动程序(及其配置),它可能最终为启动到数据库的每个新连接(show variables
例如)运行命令。由于这些命令之一可以尝试访问已损坏的命令performance_schema
,因此整个连接在完全启动之前会中止。
因此,总而言之,您可能(现在不知道)performance_schema
在修补之前已经丢失或损坏。然后,对5.7.8的补丁迫使引擎从中读取您的变量performance_schema
(而不是information_schema
,因为标志被旋转了,所以从中读取变量ON
)。由于performance_schema
已损坏,因此连接失败。
尽管停机,但运行MySQL升级是最好的方法。开启标志是一个选择,但是正如它已经在该线程上指出的那样,它带有自己的一系列含义。
两者都应该起作用,但是要权衡后果并知道您的选择:)
5.7.8-rc
版本并从数据库完全备份还原。