表'performance_schema.session_variables'不存在


299

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

Table 'performance_schema.session_variables' doesn't exist

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


2
另一个。看来您的升级没有成功。您可能需要考虑再次执行升级过程(或)重新安装5.7.8-rc版本并从数据库完全备份还原。
拉胡尔

2
您是否运行mysql_upgrade以确保对核心表/数据库进行了任何更改?
Marc B

是的,我做了mysql_upgrade,我最后一次尝试并重新安装。如果无法正常使用,我将降级至5.6版本
-Taz

28
我遇到了同样的问题,要解决该问题,请运行mysql_upgrade -u root -p --force,然后重新启动数据库服务器。
robregonm 2015年

如果mysql_upgrade命令不起作用,则mysql.performance_schema表可能已损坏。我们遇到了这个问题。为了解决该问题,我们使用以下命令删除了数据库服务器:apt-get purge mariadb-client-10.1 mariadb-common mariadb-server-10.1。这删除了所有数据库二进制文件,配置文件和数据文件。接下来,我们重新安装数据库服务器并导入回数据库。在此之后,数据库服务器运行没有问题
纳迪尔·拉蒂夫

Answers:


227

mysql_upgrade也为我工作:

# mysql_upgrade -u root -p --force
# systemctl restart mysqld

问候,MSz。


25
我确实需要重新启动mysqld(mysql.server restart,因为我在os x上使用自制安装),所以这很有帮助。否则,我会收到有关具有错误结构的session_variables的错误。
杰弗里·怀斯曼

在OS X 10.10.5(Yosemite)上使用Homebrew的行为相同。进行升级还可以修复尝试加载数据库时Sequel Pro 1.1(内部版本4499)中的崩溃。
威廉·特雷尔

4
Native table 'performance_schema'.'session_variables' has the wrong structure
stephen,2016年

8
如果您正在使用brew services,则可以使用重启服务器brew services restart mysql
Frederik Kammer

1
这对我不起作用,正确答案由viq给出。仅需要启用演出兼容性。
kato2

482

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

mysql_upgrade -u root -p --force

需要重启MySQL服务器。


6
效果很好。谢谢。我想知道原因是什么。
diguage

2
Access denied for user 'root'@'localhost' (using password: YES) while connecting to the MySQL server即使我使用了正确的root密码,我也得到了。有帮助吗?:-/
sixty4bit

4
@ sixty4bit尝试删除-p
Mike Mellor

1
@NevilleNazerane我不熟悉简单的php,但是您应该能够找到mysql的安装位置,然后打开cdm提示符并将目录更改为该位置。现在您应该可以运行该命令了。
Mihai Caracostea

4
@diguage原因是MySQL的版本升级为内部元数据引入了版本不兼容的架构。对我来说,我正在使用Homebrew在Mac上将MySQL 5.6升级到MySQL 5.7,并且MySQL数据目录未更改,因此新版本的MySQL正在读取旧的内部元数据,但不知道该怎么做-我们在这里看到的错误是该问题的明显表现。后mysql_upgrade和重新启动,一切正常。请参阅:dev.mysql.com/doc/refman/5.7/en/mysql-upgrade.html
Devy

110
mysql -u app -p
mysql> set @@global.show_compatibility_56=ON;

按照http://bugs.mysql.com/bug.php?id=78159为我工作。


1
这对我来说很完美!而且,我不必重启笨拙的mysql服务器
anu.agg

3
很抱歉,这是一个过大的解决方案:就像使用火箭筒射击苍蝇一样。此兼容性开关还有更多效果,您可能不需要所有效果。
TuncayGöncüoğlu2016年

@TuncayGöncüoğlu这些副作用有哪些?
katzmopolitan's

@katzmopolitan这里读了起来:dev.mysql.com/doc/refman/5.7/en/...。所做的更改主要与INFORMATION_SCHEMA处理(安全性等)有关,但还有更多。
TuncayGöncüoğlu的

这也对我有用。我收到的错误消息来自mysqldump。一旦我做了建议的更改,mysqldump就可以了。获得转储后,我只需将show_compatibility_56更改回OFF。
布赖恩

23

由于以上答案均未真正解释发生的情况,因此我决定加入讨论,并为该问题提供更多详细信息。

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

造成此问题的根本原因是的损坏performance_schema,原因可能是:

  • 自然损坏(卷出现kaboom,引擎错误,内核驱动程序问题等)
  • mysql修补程序期间损坏(在mysql修补程序中发生这种情况并非罕见,特别是对于主要版本升级而言)
  • 一个简单的“删除数据库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升级是最好的方法。开启标志是一个选择,但是正如它已经在该线程上指出的那样,它带有自己的一系列含义。

两者都应该起作用,但是要权衡后果并知道您的选择:)


1
谢谢。我想知道是什么导致了这个问题,然后再继续进行更改。
肯·英格拉姆



0

对于我的系统,问题最终是我仍然安装了Mysql 5.6,因此调用了该安装中的mysql_upgrade.exe,而不是5.7中的mysql_upgrade.exe。导航C:\Program Files\MySQL\MySQL Server 5.7\bin并运行.\mysql_upgrade.exe -u root


0

如果在使用mysql_upgrade -u root -p --force命令时收到此错误:

Could not create the upgrade info file '/var/lib/mysql/mysql_upgrade_info' in the MySQL Servers datadir, errno: 13

只需sudo在命令前添加即可。那对我有用,我解决了我的问题。所以,它是:sudo mysql_upgrade -u root -p --force:)


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.