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


299

MySQLを5.7.8-rcにアップグレードしてサーバーにログインした後、エラーが発生しました:

Table 'performance_schema.session_variables' doesn't exist

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


2
別のもの。アップグレードが成功しなかったようです。アップグレードプロセスをもう一度(または)5.7.8-rcバージョンを再インストールし、DBフルバックアップから復元することを検討してください。
Rahul

2
mysql_upgradeコアテーブル/データベースへの変更が行われたことを確認するために実行しましたか?
マークB

ええ、私はmysql_upgradeそれを作りました、私はそれを最後に試し、もう一度それを再インストールします。それが機能しない場合は、5.6バージョンにダウングレードします
Taz

28
私は同じ問題を経験しました、それを解決するためにを実行してmysql_upgrade -u root -p --forceから、DBサーバーを再起動しました。
robregonm 2015

mysql_upgradeコマンドが機能しない場合は、mysql.performance_schemaテーブルが破損している可能性があります。この問題がありました。この問題を修正するために、コマンドapt-get purge mariadb-client-10.1 mariadb-common mariadb-server 10.1を使用してデータベースサーバーを削除しました。これにより、すべてのデータベースバイナリ、構成、およびデータファイルが削除されました。次に、データベースサーバーを再インストールし、データベースをインポートして戻しました。その後、データベースサーバーは問題なく動作しました
Nadir Latif

回答:


227

mysql_upgradeも私にとってうまくいきました:

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

よろしく、MSz。


25
mysqldを再起動する必要がありました(mysql.server restartOS XでHomebrewインストールを使用しているため)。これは役に立ちました。そうしないと、session_variablesの構造が間違っているというエラーが発生しました。
Geoffrey Wiseman 2015年

OS X 10.10.5(Yosemite)上のHomebrewと同じ動作。アップグレードを行うと、データベースをロードしようとしたときのSequel Pro 1.1(ビルド4499)のクラッシュも修正されます。
William Turrell

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

8
使用している場合は、を使用しbrew servicesてサーバーを再起動できますbrew services restart mysql
Frederik Kammer、2016

1
これは私にはうまくいきません、正しい答えはviqによって与えられます。ショーの互換性を有効にするためにのみ必要です。
kato2

482

提案されたコマンド@robregonmを実行した後、mysqlサーバーにログオンできました。

mysql_upgrade -u root -p --force

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


6
それはうまくいきました。ありがとう。理由が何かを知りたい。
diguage 2015年

2
私はそうだAccess denied for user 'root'@'localhost' (using password: YES) while connecting to the MySQL server、私は正しいrootのパスワードを使用していていても。何か助け?:-/
sixty4bit 2016年

4
@ sixty4bit -pを削除してみてください
Mike Mellor

1
@NevilleNazerane私は簡単なphpに慣れていませんが、mysqlがインストールされる場所を見つけて、cdmプロンプトを開いてディレクトリをその場所に変更できるはずです。これで、コマンドを実行できるようになります。
Mihai Caracostea 2016年

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

@katzmopolitanこちらをお読みください:dev.mysql.com/doc/refman/5.7/en/…。変更は主にINFORMATION_SCHEMA処理(セキュリティなど)に関連していますが、それ以外にもあります。
TuncayGöncüoğlu2016年

これも私にとってはうまくいきました。私が受け取ったエラーメッセージはmysqldumpからのものでした。提案された変更を行ったら、mysqldumpが機能しました。ダンプを取得したら、show_compatibility_56をOFFに戻します。
ブライアン

23

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

はい、解決策は次のようにMySQLアップグレードコマンドを実行する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ため、最初のリリースと同様にこのフラグが導入され、この変更の爆発範囲を縮小し、ユーザーに変更について知らせ、慣れさせました。

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

だから、要約すると、あなたはあり持っていた(それは今言うことは不可能です)performance_schemaのいずれか欠落しているか、パッチを適用する前に壊れて。次に、5.7.8へのパッチにより、エンジンは変数を読み取るように強制されましたperformance_schemainformation_schemaフラグがオンになっているために変数が読み取られた場所ではなくON)。以来performance_schema壊れた、接続が失敗しています。

ダウンタイムにもかかわらず、MySQLアップグレードを実行することが最善のアプローチです。フラグをオンにすることは1つのオプションですが、すでにこのスレッドで指摘されているように、独自の影響があります。

どちらも機能するはずですが、結果に重みを付け、選択内容を把握します。


1
ありがとう。ジャンプして変更を加える前に、この問題の原因は何なのかと思っていました。
ケンイングラム

4

なしでこれらのステップに従ってください-p

  1. mysql_upgrade -u root
  2. systemctl restart mysqld

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


これでうまくいきます!のみでsystemctl restart mysqld動作しませんでした。
Ninja

次に、systemctl restart mysql
BitDEVil2K16

1

sixty4bitの質問として、mysql rootユーザーが正しく設定されていないように見える場合は、mysqlの公式ソースからconfigurator拡張機能をインストールしてみてください。

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

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

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

apt-get update

0

私のシステムでは、Mysql 5.6がまだインストールされているため、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:)


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.