web-dev-qa-db-fra.com

La table 'performance_schema.session_variables' n'existe pas

Après la mise à niveau de MySQL vers la version 5.7.8-rc et la connexion au serveur, une erreur s'est produite:

Table 'performance_schema.session_variables' doesn't exist

Je ne trouve aucune solution pour cela. Pouvez vous aider?

289
Taz

Mysql_upgrade a également fonctionné pour moi:

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

Cordialement, MSz.

208
Marcin Sz

J'ai pu me connecter au serveur mysql après avoir exécuté la commande @robregonm suggérée:

mysql_upgrade -u root -p --force

Un redémarrage du serveur MySQL est requis.

476
Mihai Caracostea
mysql -u app -p
mysql> set @@global.show_compatibility_56=ON;

selon http://bugs.mysql.com/bug.php?id=78159 a travaillé pour moi.

101
viq

Comme aucune des réponses ci-dessus n’explique ce qui s’est passé, j’ai décidé d’y revenir et d’apporter quelques détails supplémentaires à ce sujet.

Oui, la solution consiste à exécuter la commande MySQL Upgrade, comme suit: mysql_upgrade -u root -p --force, mais que s'est-il passé?

La cause fondamentale de ce problème est la corruption de performance_schema, qui peut être provoquée par:

  • Corruption organique (volumes allant kaboom, bogue de moteur, problème de pilote de noyau, etc.)
  • Corruption lors du correctif mysql (il n'est pas rare que cela se produise lors d'un correctif mysql, en particulier pour les mises à niveau majeures)
  • Un simple "drop database performance_schema" causera évidemment ce problème et présentera les mêmes symptômes que s'il était corrompu

Ce problème était peut-être présent dans votre base de données avant même le correctif, mais ce qui s’est passé avec MySQL 5.7.8 plus précisément, c’est que le drapeau show_compatibility_56 a modifié la valeur par défaut de ON par défaut, à OFF. Cet indicateur contrôle le comportement du moteur lors de requêtes permettant de définir et de lire des variables (de session et globales) sur différentes versions de MySQL.

Étant donné que MySQL 5.7+ a commencé à lire et à stocker ces variables sur performance_schema au lieu de information_schema, cet indicateur a été introduit en tant que ON dans les premières versions afin de réduire le rayon de frappe de cette modification et informer les utilisateurs du changement et s'y habituer.

OK, mais pourquoi la connexion échoue-t-elle? En fonction du pilote que vous utilisez (et de sa configuration), il peut être nécessaire d'exécuter des commandes pour chaque nouvelle connexion établie avec la base de données (comme show variables, par exemple). Dans la mesure où l'une de ces commandes peut tenter d'accéder à un performance_schema corrompu, l'ensemble de la connexion est interrompu avant d'être entièrement initié.

Donc, en résumé, vous peut (il est impossible de le dire maintenant): performance_schema est manquant ou corrompu avant l'application du correctif. Le correctif de la version 5.7.8 a ensuite forcé le moteur à lire vos variables dans performance_schema (au lieu de information_schema, où il le lisait à cause du drapeau activé ON). Puisque performance_schema a été corrompu, les connexions échouent.

Exécuter une mise à jour de MySQL est la meilleure approche, malgré le temps d'arrêt. Activer le drapeau est une option, mais il a ses propres implications, comme il a déjà été souligné sur ce fil.

Les deux devraient fonctionner, mais peser les conséquences et connaître vos choix :)

18

Suivez ces étapes sans -p:

  1. mysql_upgrade -u root
  2. systemctl restart mysqld

J'ai eu le même problème et ça marche!

4
Pranay Srivastava

En tant que question sur soixante-quatre bits, si votre utilisateur root mysql semble mal configuré, essayez d'installer l'extension de configuration à partir de la source officielle de mysql:

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

Cela vous aidera à configurer un nouveau mot de passe d'utilisateur root.

Assurez-vous de mettre à jour votre référentiel (debian/ubuntu):

apt-get update
1
Matteus Barbosa

Pour mon système, le problème était que Mysql 5.6 était toujours installé et que le fichier mysql_upgrade.exe de cette installation était appelé à la place de celui de la version 5.7. Accédez à C:\Program Files\MySQL\MySQL Server 5.7\bin et exécutez .\mysql_upgrade.exe -u root

0
Alan

Si, lors de l'utilisation de la commande mysql_upgrade -u root -p --force, vous obtenez cette erreur:

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

ajoutez simplement le Sudo avant la commande. Cela a fonctionné pour moi et j'ai résolu mon problème. Donc, c'est: Sudo mysql_upgrade -u root -p --force :)

0
Casper