MySQL: erreur fatale: impossible d'ouvrir et de verrouiller les tables de privilèges: la table 'mysql.host' n'existe pas [fermé]


9

Tout à coup, mon serveur MySQL 5.5 local a cessé de fonctionner sur mon Windows XP SP3.

J'ai également installé WAMP Apache et WAMP MySQL, mais WAMP MySQL ne fonctionne pas. Le journal des erreurs indique:

  • Impossible de démarrer le serveur: liaison sur le port TCP / IP: aucun fichier ou répertoire de ce type
  • Avez-vous déjà un autre serveur mysqld en cours d'exécution sur le port: 3306?

J'ai essayé de changer le port de 3306 à 3307, mais le service ne démarre toujours pas, ce qui donne une erreur:

L'Observateur d'événements affiche:

  • Erreur fatale: impossible d'ouvrir et de verrouiller les tables de privilèges: la table 'mysql.host' n'existe pas
  • Impossible d'ouvrir la table mysql.plugin. Veuillez exécuter mysql_upgrade pour le créer.

Apparemment, je ne peux exécuter mysql_upgrade que si le serveur fonctionne. Comment puis-je créer 'mysql.host' si le service ne peut pas être démarré?

J'ai désinstallé MySQL Server et l'ai réinstallé, et pendant l'assistant de configuration après l'installation, je reçois une erreur: le service n'a pas pu être démarré. Erreur: 0.

Comment dois-je procéder à partir d'ici?


Steve exécutez-vous cela sur Windows, BSD, Linux, OSX ou un autre système d'exploitation? Si vous l'exécutez sous Windows, les détails de certaines étapes seront différents.
Rik Schneider

@Rik Schneider: Rick, j'utilise MySQL sur mon ordinateur portable Windows. Merci.
Steve

Réponses:


9

Exécutez la commande suivante

mysql_install_db

BTW, cela est nécessaire lors d'une installation sur (au moins) Linux CentOS 7. Sinon, mysqld ne démarrera pas. Je l'ai vu quand j'ai courusystemctl status mysqld.service 2015-02-20 15:41:07 15160 [ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
Mike S

5

initialisez mysql avant de démarrer sur windows.

mysqld --initialize

J'aimerais pouvoir voter plus d'une fois. Je cherchais cette solution simple. Merci!
Schiavini

1

La première chose que vous devez faire est d'exécuter ces commandes:

use mysql
show tables;

Veuillez noter les différences

MySQL 5.0 a 17 tables dans le schéma mysql

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| func                      |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| proc                      |
| procs_priv                |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

MySQL 5.1 a 23 tables dans le schéma mysql

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

MySQL 5.5 a 24 tables dans le schéma mysql

+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+

Veuillez noter que mysql.plugin n'existe pas dans MySQL 5.0. Il est très plausible de supposer que vous avez installé MySQL 5.0 et fait disparaître les tables vitales pour MySQL 5.5.

Voici quelques bonnes nouvelles. Il y a quelque chose que vous pouvez essayer.

Pour cet exemple

  • ServerA est l'endroit où vivent vos données MySQL 5.5
  • ServerB est l'endroit où vous allez créer un environnement MySQL 5.5 séparé

Voici vos étapes

  1. Sur ServerA, mkdir / root / myusers
  2. Sur ServerA, cp /var/lib/mysql/mysql/user.* / root / myusers /.
  3. Installez MySQL 5.5 sur ServerB
  4. scp ServerB: / var / lib / mysql / mysql / * ServerA: / var / lib / mysql / mysql /.
  5. Sur ServerA, cp /root/myusers/user.* / var / lib / mysql / mysql /.
  6. service mysql start

C'est ça.

Si vous l'exécutez sous Windows, les mêmes principes doivent s'appliquer.

Essaie !!!

MISE À JOUR 2011-07-29 16:15 EDT

Si vos noms d'utilisateur avaient des privilèges spécifiques à la base de données, voici vos étapes

  1. Sur ServerA, mkdir / root / myusers
  2. Sur ServerA, cp /var/lib/mysql/mysql/user.* / root / myusers /.
  3. Sur ServerA, cp /var/lib/mysql/mysql/db.* / root / myusers /.
  4. Installez MySQL 5.5 sur ServerB
  5. scp ServerB: / var / lib / mysql / mysql / * ServerA: / var / lib / mysql / mysql /.
  6. Sur ServerA, cp / root / myusers / * / var / lib / mysql / mysql /.
  7. service mysql start

0

Le service n'a pas pu être démarré. Erreur: 0.

Ajoutez le chemin MySQL aux variables d'environnement.


Merci, mais c'était déjà dans la variable Path.
Steve

0

on dirait que vous avez déjà mysql en cours d'exécution

essayer

ps ax|grep mysql

si vous voyez une sortie, vous devez probablement l'arrêter (ou redémarrer la boîte).

si vous ne voyez aucune sortie, essayez d'exécuter mysqld sans diaboliser et voyez la sortie.


0

J'ai ajouté une balise Windows pour aider les gens à répondre à la question.

Mon arrière-plan n'est pas Windows, mais les principes s'appliquent.

Y a-t-il un processus mysql déjà en cours d'exécution? Si c'est le cas, vous devrez le tuer avant de le désinstaller. S'il était toujours en cours d'exécution lorsque vous avez essayé de désinstaller / réinstaller, vous aurez des processus et des fichiers qui vous empêcheront de désinstaller complètement.

Ouvrez la fenêtre des services, recherchez quoi que ce soit avec mysql dans le nom et assurez-vous qu'il est configuré pour ne pas tenter de démarrer avec un redémarrage. Ouvrez ensuite l'onglet des processus en cours d'exécution de la fenêtre des programmes en cours d'exécution (utilisez CTRL-ALT-DEL pour l'ouvrir) et recherchez et supprimez les processus en cours d'exécution avec mysql dans le nom.

Si vous êtes satisfait qu'il n'y a plus de processus mysql en cours d'exécution, vous pouvez continuer. Vous voudrez peut-être redémarrer pour être certain qu'aucun processus mysql en cours d'exécution ne traîne plus.

À ce stade, vous devriez pouvoir réinstaller et démarrer mysql.


0

Exécutez mysql-test-run et vous devriez voir la sortie suivante:

./mysql-test-run
Logging: ./mysql-test-run  
2013-09-14 03:39:32 2566 [Warning] Setting lower_case_table_names=2 because file system for /var/folders/fr/sn4l2f393_v_ytcwkb0lx7_40000gp/T/_M2mZFQPjV/ is case insensitive
2013-09-14 03:39:32 2566 [Note] Plugin 'FEDERATED' is disabled.
2013-09-14 03:39:32 2566 [Note] Binlog end
2013-09-14 03:39:32 2566 [Note] Shutting down plugin 'MyISAM'
2013-09-14 03:39:32 2566 [Note] Shutting down plugin 'CSV'
MySQL Version 5.6.13
Checking supported features...
 - SSL connections supported
Using suites: main,sys_vars,binlog,federated,rpl,innodb,innodb_fts,perfschema,funcs_1,opt_trace,parts,auth_sec
Collecting tests...
 - adding combinations for binlog



 - adding combinations for rpl
Removing old var directory...
Creating var directory '/Users/das/mysql/mysql-5.6.13-osx10.7-x86_64/mysql-test/var'...
Installing system database...
Using server port 50409

==============================================================================

TEST                                      RESULT   TIME (ms) or COMMENT
--------------------------------------------------------------------------

0

Si vous déplacez votre datadir, vous devez non seulement donner les nouvelles autorisations de datadir, mais vous devez vous assurer que tous les répertoires parents ont l'autorisation.

J'ai déplacé mon datadir sur un disque dur, monté dans Ubuntu comme:

/media/*user*/Data/

et mon datadir était Bases de données .

J'ai dû définir des autorisations sur 771 pour chacun des répertoires média, utilisateur et données:

sudo chmod 771 *DIR*

Si cela ne fonctionne pas, une autre façon de faire fonctionner mysql est de changer l'utilisateur dans /etc/mysql/my.cnf en root; bien qu'il y ait sans aucun doute des problèmes à le faire du point de vue de la sécurité.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.