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?
Mysql_upgrade a également fonctionné pour moi:
# mysql_upgrade -u root -p --force
# systemctl restart mysqld
Cordialement, MSz.
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.
mysql -u app -p
mysql> set @@global.show_compatibility_56=ON;
selon http://bugs.mysql.com/bug.php?id=78159 a travaillé pour moi.
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:
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 :)
Suivez ces étapes sans -p
:
mysql_upgrade -u root
systemctl restart mysqld
J'ai eu le même problème et ça marche!
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
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
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
:)