web-dev-qa-db-ja.com

テーブル 'performance_schema.session_variables'は存在しません

MySQLを5.7.8-rcにアップグレードし、サーバーにログを記録した後、エラーが発生しました。

Table 'performance_schema.session_variables' doesn't exist

これに対する解決策が見つかりません。手伝ってくれますか ?

289
Taz

Mysql_upgradeも私のために働きました:

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

よろしく、MSz。

193
Marcin Sz

私は@robregonmが提案したコマンドを実行した後、mysqlサーバーにログオンすることができました:

mysql_upgrade -u root -p --force

MySQLサーバーの再起動が必要です。

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

のように http://bugs.mysql.com/bug.php?id=78159 私のために働いた。

98
viq

上記の答えのどれも実際には何が起こったのかを説明していないので、私はこの問題について詳しく説明し、もう少し詳しく説明することにしました。

はい、解決策は以下のようにMySQL Upgradeコマンドを実行することです:mysql_upgrade -u root -p --force、しかし何が起こりましたか?

この問題の根本的な原因はperformance_schemaの破損です。

  • 有機的な破損(量はkaboomに行く、エンジンのバグ、カーネルドライバの問題など)
  • Mysqlパッチ中の破損(特にメジャーバージョンアップグレードのために、これがmysqlパッチ中に起こるのは前例がありません)
  • 単純な "drop database performance_schema"は明らかにこの問題を引き起こします、そしてそれはそれが破損しているかのように同じ症状を示すでしょう。

この問題は、パッチ適用前でもデータベースに存在していた可能性がありますが、MySQL 5.7.8で特に発生したのは、フラグshow_compatibility_56がデフォルト値をデフォルトのONからOFFに変更したことです。このフラグは、さまざまなMySQLバージョンで変数(セッションおよびグローバル)を設定および読み取るためのクエリに対するエンジンの動作を制御します。

MySQL 5.7以降では、これらの変数の読み取りと格納をperformance_schemaではなくinformation_schemaに開始したため、最初のリリースではこのフラグがONとして導入され、この変更の範囲を広げてユーザーに知らせています。

しかし、なぜ接続が失敗するのでしょうか。使用しているドライバ(およびその設定)によっては、データベースへの新しい接続(たとえばshow variablesなど)ごとにコマンドが実行される可能性があるためです。これらのコマンドの1つが破損したperformance_schemaにアクセスしようとする可能性があるため、完全に開始される前に接続全体が中止されます。

要約すると、あなたは may (今では不可能です)パッチを当てる前にperformance_schemaが見つからないか壊れています。 5.7.8へのパッチはそれから(ONが回されたためにそれがそれを読んでいたperformance_schemaの代わりに)エンジンにあなたの変数をinformation_schemaから読ませることを強制した。 performance_schemaが破損しているので、接続は失敗しています。

ダウンタイムにもかかわらず、MySQLアップグレードを実行するのが最善の方法です。フラグをオンにすることは1つのオプションですが、それはすでにこのスレッドで指摘されているように、それはそれ自身の含意のセットが付属しています。

両方ともうまくいくはずですが、結果に重点を置き、あなたの選択を知ってください:)

11

-pなしで次の手順を実行します。

  1. mysql_upgrade -u root
  2. systemctl restart mysqld

私は同じ問題を抱えていましたが、うまくいきます!

4

Sixty4bitの質問として、あなたのmysql rootユーザが誤って設定されているように見える場合は、mysqlの公式ソースからコンフィギュレータ拡張をインストールしてみてください。

https://dev.mysql.com/downloads/repo/apt/

新しいrootユーザーのパスワードを設定するのに役立ちます。

リポジトリを必ず更新してください(debian/ubuntu):

apt-get update
1
Matteus Barbosa

私のシステムでは、問題はMysql 5.6がまだインストールされていたため、そのインストールからのmysql_upgrade.exeが5.7の代わりに呼び出されていたことです。 C:\Program Files\MySQL\MySQL Server 5.7\binに移動して.\mysql_upgrade.exe -u rootを実行します

0
Alan

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 :)

0
Casper