web-dev-qa-db-fra.com

Le nombre de colonnes de mysql.user est incorrect. Attendu 42, trouvé 44. La table est probablement corrompue

Actuellement, j'utilise la dernière version de ISPConfig 3. Aujourd'hui, je voulais ajouter une base de données et un utilisateur. Ça n'a pas marché. Ensuite, j'ai essayé sur PHPmyadmin et cela n'a pas fonctionné.

Lorsque j'ai essayé d'ajouter un utilisateur dans le panneau d'utilisateurs de PHPMyadmin, j'ai reçu le message d'erreur suivant:

Vous avez une erreur dans votre syntaxe SQL; vérifiez le manuel que correspond à la version de votre serveur MySQL pour la bonne syntaxe à utiliser près de '* TO' test '@' localhost '' à la ligne 1

La sortie de /var/log/mysql/error.log:

[ERREUR] Le nombre de colonnes de mysql.user est incorrect. Attendu 42, trouvé 44 . La table est probablement corrompue

Version Mysql: 5.5.55-0 + deb8u1 Version PHPMyadmin: 4: 4.2.12-2 + deb8u2

Debian Linux 8

28
Ser1ous1

J'ai eu le même problème lorsque j'ai mis à jour le serveur mysql de 5.5 à 5.7 dans Debian 8 (Jessie). Dans de rares cas, cela se produit probablement si vous mettez à jour directement en ignorant les séquences de versions. (Beaucoup de gens le font, mais ces mises à jour ne sont pas officiellement supportées). Dans mon cas, cela a bien fonctionné lorsque j’ai exécuté la commande suivante:

mysql_upgrade --force -uroot -p

J'espère que cela t'aidera

76
Correcter

Migration de mariadb 10 vers mysql 5.6 a connu des problèmes similaires. Le message d'erreur que j'ai reçu était légèrement différent de ceux listés sur cette page ... ce qui signifie bien sûr qu'il fallait une solution différente. Lors de la tentative de modification d'un enregistrement d'utilisateur, j'ai reçu l'erreur suivante:

Le nombre de colonnes de mysql.user est incorrect. Attendu 43, trouvé 46. La table est probablement corrompue

Certains des conseils ci-dessus ont aidé à cerner le problème. Après avoir jeté un œil sur un serveur similaire (celui de mysql 5.6), j’ai comparé les champs de la table utilisateur "corrompue" (de la table mariadb 10 mysql.users) et de la table utilisateur "fonctionnelle" de l’autre mysql. 5.6 table mysql.users.

J'ai enlevé les trois champs problématiques en utilisant la commande mysql & les commandes suivantes:

mysql -u root -p
use mysql;
alter table mysql.user drop column default_role;
alter table mysql.user drop column max_statement_time;
alter table mysql.user drop column password_expired;
quit

Problème résolu!

16
jadik

Dans mon cas, et suite à la recommandation du message d'erreur, j'ai exécuté:

root@mysql-190877524-gm3j4:/# mysql_upgrade -uroot -p***
Checking if update is needed.
Checking server version.
Running queries to upgrade MySQL server.
Checking system database.
mysql.columns_priv                                 OK
mysql.db                                           OK
mysql.engine_cost                                  OK
mysql.event                                        OK
mysql.func                                         OK
mysql.general_log                                  OK
mysql.user                                         OK
Upgrading the sys schema.
Checking databases.
[...]
Upgrade process completed successfully.
Checking if update is needed.

Cela a tout résolu.

6
tokenizer_fsj

J'ai eu le même problème aujourd'hui avec Debian (Jessie) et une autre boîte AMI Linux. Supprimer la colonne mot de passe expiré de la table utilisateur mysql a résolu le problème pour moi. 

mysql> alter table mysql.user drop column password_expired;
5
nfo

est inquiet pour moi

mysql_upgrade -uroot -p

et ajoutez votre mot de passe root

5
Fadid

Aujourd'hui, j'ai rencontré le même problème après avoir effectué une mise à niveau dist d'une boîte de stockage Debian Jessie 8. Après quelques recherches, j'ai découvert que la structure de la table mysql était différente de ce que mysql-5.5.55 s'attend à trouver. Je viens de comparer la base de données mysql corrompue avec une base de données fraîchement installée et de créer un petit fichier de correctif, qui devrait corriger l’erreur. Je ne sais pas si cela fonctionne dans d'autres conditions. Donc, soyez prudent en utilisant ce correctif et en sauvegardant/var/lib/mysql et/etc/mysql avant de faire quelque chose de méchant;) Je ne saurais en aucun cas être tenu responsable de tout type de dommage résultant de ce correctif. Utilisez-le à vos risques et périls.

Tout d'abord faire des backups !! et encore plus de BACKUPS !! par exemple. Vous pouvez essayer mysqlsafebackup (regardez https://github.com/VerboteneZone/MySQLSafeBackup ), une solution de sauvegarde MySQL écrite et compressée.

Téléchargez le correctif suivant sur votre boîte:

# wget https://download.rent-an.expert/mysql-patch-5.5.55.sql.gz

Assurez-vous qu'aucune instance n'accède actuellement à votre serveur MySQL (arrêtez des services tels qu'Apache2, postfix ou tout ce qui accède normalement au serveur MySQL). Si vous vous êtes assuré que vous êtes seul dans le noir, appliquez le correctif et forcez une mise à jour de mysql avec les commandes suivantes:

# zcat mysql-patch-5.5.55.sql.gz | mysql -uroot -p mysql
# mysql_upgrade --force -uroot -p

Si quelque chose a fonctionné sans erreur, redémarrez votre service MySQL:

# service mysql stop
# service mysql start

Après cela, essayez de créer un testuser pour voir si le correctif a été appliqué correctement:

# mysql -uroot -p

CREATE USER 'Testuser123' @ 'localhost' IDENTIFIED BY 'Pass0worZ';

Vous devriez recevoir un message du type:

Requête OK, 0 lignes affectées (0.00 s)

Maintenant, vous pouvez à nouveau supprimer votre utilisateur test en toute sécurité, avec:

DROP USER 'Testuser123' @ 'localhost';

Quoi qu'il en soit, si quelque chose ne va pas, restaurez votre sauvegarde et essayez à nouveau;)

J'espère que cela pourra aider.

2
Olli

Dans mon cas, avec Debian 8 et MySQL 5.5, mysql_upgrade --force -uroot -p ne résoudra pas le problème.

J'avais besoin de passer à MySQL 5.6 avant de lancer la commande ci-dessus.

http://www.debiantutorials.com/install-mysql-server-5-6-debian-7-8/

2
xyz

Lors de la migration de mysql 5.5 vers la version 5.7 (en utilisant un mysqldump complet puis la commande source), l'erreur ne se produisait que lorsque j'essayais de modifier ou d'ajouter un utilisateur

ERREUR 1805 (HY000): Le nombre de colonnes de mysql.user est incorrect. Attendu 45, trouvé 42. La table est probablement corrompue

Semblable à d'autres que j'ai fait 

Sudo mysql_upgrade -u root -p #Sudo pour pouvoir écrire un journal Sudo

service mysql redémarrer

Et cela a résolu le problème, je pouvais ajouter et éditer à nouveau des utilisateurs. J'aurais ajouté cette petite différence comme commentaire à l'une des réponses similaires, mais je n'ai pas encore la réputation 

2
texdevelopers

Je suis passé de mariadb à mysql car je ne pouvais pas changer le myriadbdata directory sur centos 7 x 64.

sur mysql Quand j'ai essayé d'ajouter un nouvel utilisateur autre que root. j'ai eu 

column count of mysql.user is wrong expected 45 found 48

j'ai essayé 

mysql_upgrade  -uroot -p

et 

mysql_upgrade --force -uroot -p

mais j'ai toujours la même erreur . alors je suis allé de l'avant et j'ai ajouté new user manually dans la table mysql.user en copiant tous les détails des autres lignes ayant le nom d'utilisateur root.

restart service mysqld

et fait.

2
AMB

J'ai rencontré le même problème aujourd'hui ... La solution pour moi consistait à ajouter manuellement les colonnes manquantes à la table des utilisateurs.

Attention - A utiliser à vos risques et périls

Les nouvelles colonnes ajoutées avec mysql.5.5.55 sont les suivantes:

plugin, authentication_string, Create_tablespace_priv

Ils doivent être ajoutés dans un ordre spécifique:

use mysql;
alter Table user ADD Create_tablespace_priv enum('N','Y')  DEFAULT 'N' NOT NULL AFTER Trigger_priv;
alter Table user ADD plugin char(64) DEFAULT '';
alter Table user ADD authentication_string text DEFAULT NULL;

Après cela, j'ai pu à nouveau modifier la table des utilisateurs.

1
Dom

Après la mise à niveau, j’ai eu "Le nombre de colonnes de mysql.user est erroné. Attendu 45, trouvé 46. La table est probablement corrompue" J'avais des problèmes pour me connecter, j’ai donc lancé la base de données:

mysqld --console --skip-grant-tables

connecté et il y avait une colonne supplémentaire par rapport à ma table par défaut "Is_role" alors je l'ai supprimé:

ALTER TABLE `user` DROP COLUMN `is_role`;

redémarré mysqld et nous sommes tous bons.

1
Soth

Calme le même message d'erreur: Le nombre de colonnes de mysql.user est incorrect. Attendu 42, trouvé 43. La table est probablement corrompue.
Ce n'est pas la solution mais un contournement ... J'ai sauvegardé toutes mes bases de données depuis mysql 5.5.55-0 + deb8u1 et les ai restaurées sous mysql 5.7.18-0ubuntu0.16.04.1 jusqu'à ce que ce bogue ne soit pas résolu Travail difficile pour mettre à jour toutes les connexions mais utile.

0
fdav

J'ai finalement résolu mon problème de cette façon:

1) Démarrer mysql: mysqld –-console –-skip-grant-tables –-skip-external-locking (garder le terminal ouvert)

2) Exécuter: mysqlcheck –-repair mysql user

Source: https://forums.mysql.com/read.php?10,652134,652135#msg-652135

0
nikoskip