Table 'performance_schema.session_variables' 不存在
Table 'performance_schema.session_variables' doesn't exist
升级 MySQL 到 5.7.8-rc 后
并登录到服务器时出现错误:
Table 'performance_schema.session_variables' doesn't exist
我找不到任何解决方案。你能帮忙吗?
在 运行 @robregonm 建议的命令后,我能够登录到 mysql 服务器:
mysql_upgrade -u root -p --force
需要 MySQL 服务器重新启动。
mysql_upgrade 对我也有用:
# mysql_upgrade -u root -p --force
# systemctl restart mysqld
此致,
MSz.
mysql -u app -p
mysql> set @@global.show_compatibility_56=ON;
作为 64 位问题,如果您的 mysql root 用户看起来配置错误,请尝试从 mysql 官方来源安装配置器扩展:
https://dev.mysql.com/downloads/repo/apt/
它将帮助您设置新的 root 用户密码。
确保更新您的存储库 (debian/ubuntu) :
apt-get update
有时候mysql_upgrade -u root -p --force
不够真实,
请参考这个问题:
根据它:
- 打开命令
cd [installation_path]\eds-binaries\dbserver\mysql5711x86x160420141510\bin
mysql_upgrade -u root -p --force
在没有 -p
的情况下执行以下步骤:
mysql_upgrade -u root
systemctl restart mysqld
我遇到了同样的问题,并且有效!
由于上面的 none 个答案实际上解释了发生的事情,我决定插话并为这个问题提供更多细节。
是的,解决方法是运行MySQL升级命令,如下:mysql_upgrade -u root -p --force
,但是发生了什么?
此问题的根本原因是 performance_schema
损坏,可能由以下原因引起:
- 有机损坏(卷突然爆炸、引擎错误、内核驱动程序问题等)
- mysql 补丁期间的损坏(在 mysql 补丁期间发生这种情况并非闻所未闻,特别是对于主要版本升级)
- 一个简单的 "drop database performance_schema" 显然会导致此问题,并且会出现与已损坏相同的症状
这个问题可能在打补丁之前就已经存在于你的数据库中,但是在 MySQL 5.7.8 上发生的具体情况是标志 show_compatibility_56
改变了它的默认值 ON
默认为 OFF
。此标志控制引擎在各种 MySQL 版本上设置和读取变量(会话和全局)的查询行为。
因为 MySQL 5.7+ 开始在 performance_schema
而不是 information_schema
上读取和存储这些变量,这个标志在第一个版本中被引入为 ON
减少这个变化的爆炸半径,让用户知道这个变化并习惯它。
好的,但是为什么连接失败?因为根据您使用的驱动程序(及其配置),它可能会为每个启动到数据库的新连接执行 运行ning 命令(例如 show variables
)。因为这些命令之一可以尝试访问损坏的 performance_schema
,所以整个连接在完全启动之前就中止了。
因此,总而言之,您可能(现在无法判断)在修补之前 performance_schema
丢失或损坏。 5.7.8 的补丁然后强制引擎从 performance_schema
中读取您的变量(而不是 information_schema
,因为标志被转换 ON
,它从中读取变量。由于 performance_schema
已损坏,连接失败。
运行 MySQL 升级是最好的方法,尽管会停机。打开标志是一种选择,但它有其自身的一系列含义,正如该线程中已经指出的那样。
两者都应该有效,但要权衡后果并了解您的选择:)
对于我的系统,问题最终是我仍然安装了 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
如果在使用 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
:)
升级 MySQL 到 5.7.8-rc 后 并登录到服务器时出现错误:
Table 'performance_schema.session_variables' doesn't exist
我找不到任何解决方案。你能帮忙吗?
在 运行 @robregonm 建议的命令后,我能够登录到 mysql 服务器:
mysql_upgrade -u root -p --force
需要 MySQL 服务器重新启动。
mysql_upgrade 对我也有用:
# mysql_upgrade -u root -p --force
# systemctl restart mysqld
此致, MSz.
mysql -u app -p
mysql> set @@global.show_compatibility_56=ON;
作为 64 位问题,如果您的 mysql root 用户看起来配置错误,请尝试从 mysql 官方来源安装配置器扩展:
https://dev.mysql.com/downloads/repo/apt/
它将帮助您设置新的 root 用户密码。
确保更新您的存储库 (debian/ubuntu) :
apt-get update
有时候mysql_upgrade -u root -p --force
不够真实,
请参考这个问题:
根据它:
- 打开命令
cd [installation_path]\eds-binaries\dbserver\mysql5711x86x160420141510\bin
mysql_upgrade -u root -p --force
在没有 -p
的情况下执行以下步骤:
mysql_upgrade -u root
systemctl restart mysqld
我遇到了同样的问题,并且有效!
由于上面的 none 个答案实际上解释了发生的事情,我决定插话并为这个问题提供更多细节。
是的,解决方法是运行MySQL升级命令,如下:mysql_upgrade -u root -p --force
,但是发生了什么?
此问题的根本原因是 performance_schema
损坏,可能由以下原因引起:
- 有机损坏(卷突然爆炸、引擎错误、内核驱动程序问题等)
- mysql 补丁期间的损坏(在 mysql 补丁期间发生这种情况并非闻所未闻,特别是对于主要版本升级)
- 一个简单的 "drop database performance_schema" 显然会导致此问题,并且会出现与已损坏相同的症状
这个问题可能在打补丁之前就已经存在于你的数据库中,但是在 MySQL 5.7.8 上发生的具体情况是标志 show_compatibility_56
改变了它的默认值 ON
默认为 OFF
。此标志控制引擎在各种 MySQL 版本上设置和读取变量(会话和全局)的查询行为。
因为 MySQL 5.7+ 开始在 performance_schema
而不是 information_schema
上读取和存储这些变量,这个标志在第一个版本中被引入为 ON
减少这个变化的爆炸半径,让用户知道这个变化并习惯它。
好的,但是为什么连接失败?因为根据您使用的驱动程序(及其配置),它可能会为每个启动到数据库的新连接执行 运行ning 命令(例如 show variables
)。因为这些命令之一可以尝试访问损坏的 performance_schema
,所以整个连接在完全启动之前就中止了。
因此,总而言之,您可能(现在无法判断)在修补之前 performance_schema
丢失或损坏。 5.7.8 的补丁然后强制引擎从 performance_schema
中读取您的变量(而不是 information_schema
,因为标志被转换 ON
,它从中读取变量。由于 performance_schema
已损坏,连接失败。
运行 MySQL 升级是最好的方法,尽管会停机。打开标志是一种选择,但它有其自身的一系列含义,正如该线程中已经指出的那样。
两者都应该有效,但要权衡后果并了解您的选择:)
对于我的系统,问题最终是我仍然安装了 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
如果在使用 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
:)