表'performance_schema.session_variables'不存在

Taz*_*Taz 294 mysql upgrade

将MySQL升级到5.7.8-rc并登录到服务器后出现错误:

Table 'performance_schema.session_variables' doesn't exist
Run Code Online (Sandbox Code Playgroud)

我找不到任何解决方案.你能帮我吗 ?

Mih*_*tea 479

运行命令@robregonm建议后,我能够登录到mysql服务器:

mysql_upgrade -u root -p --force
Run Code Online (Sandbox Code Playgroud)

需要重启MySQL服务器.

  • 这很好用.谢谢.我想知道原因是什么. (6认同)
  • @ sixty4bit尝试删除-p (4认同)
  • @diguage原因是MySQL的版本升级为内部元数据引入了版本不兼容的模式.对我来说,我使用Homebrew在Mac上将MySQL 5.6升级到MySQL 5.7并且MySQL数据目录没有改变,所以新版本MySQL正在读取旧的内部元数据但不知道该怎么做 - 我们在这里看到的错误是这个问题的一个表现.在`mysql_upgrade`并重启之后,一切正常.请参阅:http://dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html (4认同)
  • 即使我使用正确的root密码,我也会在连接到MySQL服务器时获得"拒绝用户'root'@ localhost'(使用密码:YES).任何帮助?: - / (2认同)

小智 214

mysql_upgrade也适用于我:

# mysql_upgrade -u root -p --force
# systemctl restart mysqld
Run Code Online (Sandbox Code Playgroud)

问候,MSz.

  • 我确实需要重新启动mysqld(`mysql.server restart`,因为我在os x上使用自制程序安装),所以这很有帮助.否则我收到有关session_variables结构错误的错误. (25认同)
  • 如果您正在使用`brew services`,您可以使用`brew services restart mysql`重新启动服务器. (8认同)
  • `native table'performance_schema'.'session_variables'具有错误的结构` (4认同)

小智 104

mysql -u app -p
mysql> set @@global.show_compatibility_56=ON;
Run Code Online (Sandbox Code Playgroud)

根据http://bugs.mysql.com/bug.php?id=78159为我工作.

  • 对不起,这是一个有点过大的解决方案:比如使用火箭筒射击苍蝇.此兼容性开关具有更多效果,您可能不需要所有这些效果. (3认同)

Mar*_*ins 18

由于上述答案中没有一个能够解释发生的事情,因此我决定加入并为此问题提供更多细节.

是的,解决方案是运行MySQL Upgrade命令,如下所示:mysql_upgrade -u root -p --force但是发生了什么?

这个问题的根本原因是腐败performance_schema,这可能是由以下原因引起的:

  • 有机腐败(卷出kaboom,引擎错误,内核驱动程序问题等)
  • mysql补丁期间的损坏(在mysql补丁期间发生这种情况并非闻所未闻,特别是对于主要版本的升级)
  • 一个简单的"drop database performance_schema"显然会导致这个问题,它会出现与它被破坏时相同的症状

甚至在修补程序之前,这个问题可能已存在于您的数据库中,但MySQL 5.7.8上发生的情况特别是该标志show_compatibility_56将其默认值从默认情况下更改ONOFF.此标志控制引擎在各种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

请按照以下步骤操作-p

  1. mysql_upgrade -u root
  2. systemctl restart mysqld

我有同样的问题,它的工作原理!