web-dev-qa-db-fra.com

Code d'erreur: 1728. Impossible de charger depuis mysql.db. La table est probablement corrompue

Chaque fois que j'essaie de faire une requête DB avec un utilisateur DB particulier (myuser) j'obtiens l'erreur suivante:

Accès refusé pour l'utilisateur 'myuser' @ 'localhost' à la base de données 'mydatabase' [1044]

J'ai décidé de vérifier les subventions pour cet utilisateur et j'ai vu que l'une des subventions pouvait peut-être bénéficier d'une mise à jour, j'ai donc essayé de la mettre à jour et j'ai obtenu l'erreur suivante:

Code d'erreur: 1728. Impossible de charger depuis mysql.db. La table est probablement corrompue

J'ai trouvé l'erreur sur Google et j'ai trouvé Impossible de charger depuis mysql.proc. Le tableau est probablement corromp , qui recommande de faire mysql_upgrade -u root -pxxx. J'ai essayé et obtenu cette erreur:

Une erreur s'est produite: la session mysql.s existe mais n'est pas correctement configurée. La mysql.session a besoin des privilèges SELECT dans la base de données performance_schema et la table mysql.db ainsi que des privilèges SUPER.

J'ai trouvé cette erreur sur Google et j'ai trouvé Problème de mise à niveau MySQL mais la réponse n'est pas applicable - il semble y avoir une seule mysql.session utilisateur quand je le fais SELECT * FROM mysql.user;. J'ai donc pensé que je créerais peut-être moi-même les SUBVENTIONS:

GRANT SELECT ON `performance_schema`.* TO 'mysql.session'@'localhost';
GRANT SELECT ON `mysql`.`db` TO 'mysql.session'@'localhost';
GRANT SUPER ON *.* TO 'mysql.session'@'localhost';

Seul problème: lorsque j'essaie de le faire, j'obtiens le même "Error Code: 1728. Cannot load from mysql.db. The table is probably corrupted "que j'ai eu avant.

Ma question est ... que puis-je faire pour résoudre ce problème? J'ai une sauvegarde complète de la base de données que j'ai restaurée sans problème il y a quelques mois et s'il y a eu des changements de base de données qui se sont produits dans la base de données depuis, je suis d'accord pour la perdre. Peut-être que ma meilleure option est de simplement désinstaller MySQL et de le réinstaller? Et si tel est le cas, puis-je prendre des mesures pour empêcher que ce problème ne se reproduise?

J'utilise MySQL 5.7.25-0ubuntu0.16.04.2 sur Ubuntu 16.04.5 LTS sur une gouttelette Digital Ocean.

Des idées?

edit: J'obtiens également cette erreur lorsque j'essaie de créer un nouvel utilisateur MySQL:

CREATE USER username IDENTIFIED BY 'password';

J'ai essayé mysqlcheck -uroot mysql db et j'ai récupéré ceci:

mysql.db                                           OK

J'ai essayé ls -latr /var/lib/mysql/mysql/db* et j'ai récupéré ceci:

-rw-r----- 1 mysql mysql   65 Nov  8 03:55 db.opt
-rw-r----- 1 mysql mysql  440 Nov 10 17:51 db.MYD
-rw-r----- 1 mysql mysql 5120 Feb 11 11:54 db.MYI
-rw-r----- 1 mysql mysql 9582 Feb 11 11:54 db.frm

Je note qu'il n'y a pas d'ID de fichier * .ibd.

SELECT * FROM mysql.db, tout en étant connecté en tant que racine SSH/MySQL, fonctionne sans problème, mais tous les "Error Code: 1728. Cannot load from mysql.db. The table is probably corrupted "des erreurs me viennent également lorsque je suis connecté en tant que racine SSH/racine MySQL, donc idk.

edit2: Je ne peux même pas faire apt-get remove mysql-server car il me donne la même "mysql.session existe mais n'est pas correctement configuré" que je recevais avant ...

2
neubert

J'ai vu cette erreur plusieurs fois lors de l'installation de versions antérieures de MySQL 5.7. Je suis stupéfait que vous obteniez toujours cette erreur.

Avant MySQL 8.0, certaines des tables du schéma mysql sont MyISAM.

Malheureusement, MyISAMtables se corrompent très facilement.

EXEMPLE: l'en-tête du .MYD fichier contient le nombre de descripteurs de fichiers ouverts. Si une table MyISAM est fermée et a une valeur différente de zéro pour les descripteurs de fichiers ouverts, le moteur de stockage MyISAM considère que la table est corrompue.

Solution: exécutez simplement la commande suivante:

mysql> REPAIR TABLE mysql.db;

Je l'ai suggéré avant: Mar 15, 2012: Pourquoi les tables MySQL se bloquent-elles? Comment puis-je l'empêcher?

1
RolandoMySQLDBA