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
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
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!
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.
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;
est inquiet pour moi
mysql_upgrade -uroot -p
et ajoutez votre mot de passe root
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.
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/
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
Je suis passé de mariadb
à mysql
car je ne pouvais pas changer le myriadb
data 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.
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.
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.
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.
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