web-dev-qa-db-fra.com

Erreur fatale: impossible d'ouvrir et de verrouiller les tables de privilèges: la table 'mysql.Host' n'existe pas

Je suis sur un serveur qui vient d’être installé sur RHEL 5. J’ai pu installer Apache et PHP très bien.), Mais j’ai de gros problèmes avec mon installation de MySQL. J’ai essayé ce qui suit:

yum install mysql-server mysql 

Et n'a pas eu d'erreurs ou de conflits. Ensuite, j'ai essayé de démarrer mysql avec les commandes suivantes:

chkconfig --levels 235 mysqld on
service mysqld start

Et obtenir Timeout error occurred trying to start MySQL Daemon.

J'ai vérifié mes journaux et voir cette erreur:

[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.Host' doesn't exist

Je ne suis pas sûr où aller d'ici.

Pour référence, j'utilise RHEL 5 et ai installé les dernières versions de PHP 5 et Apache.

60
Bad Programmer
  1. Désinstallez mysql en utilisant yum remove mysql*

  2. Supprimer récursivement /usr/bin/mysql et /var/lib/mysql

  3. Supprimer le fichier /etc/my.cnf.rmp

  4. Utilisation ps -e pour vérifier les processus afin de s’assurer que mysql ne fonctionne toujours pas.

  5. Redémarrez le serveur avec reboot

  6. Courir yum install mysql-server. Cela semble également installer le client mysql en tant que dépendance.

  7. Donnez à mysql la propriété et les privilèges de groupe avec:

    chown -R mysql /var/lib/mysql

    chgrp -R mysql /var/lib/mysql

  8. Utilisation service mysqld start pour démarrer le démon MySQL.

61
Bad Programmer

Après chown et chgrp 'ing /var/lib/mysql _ par la réponse de @ Bad Programmer , vous devrez peut-être également exécuter la commande suivante:

Sudo mysql_install_db --user=mysql --ldata=/var/lib/mysql

Puis redémarrez votre mysqld.

58
bk0

J'ai eu ce problème sur Arch Linux également. Le problème était que pacman avait installé le paquet dans un emplacement différent de celui attendu par MySQL. J'ai pu résoudre le problème avec ceci:

Sudo mysql_install_db --user=mysql --basedir=/usr/ --ldata=/var/lib/mysql/

J'espère que cela aide quelqu'un!

39
zomblake
mysql_install_db –-user=mysql --ldata=/var/lib/mysql

Travaillé pour moi dans Centos 7

11
JVJ

initialiser mysql avant de démarrer sous Windows.

mysqld --initialize
10
tvrcgo

La racine de mon problème semblait être selinux, qui était activé automatiquement lors de l'installation du système d'exploitation.

Je voulais mon mysql dans/data.

Après avoir vérifié que mon.cnf avait:

datadir=/data/mysql

(et en laissant le socket dans/var/lib/mysql), j’ai exécuté la commande pour désactiver selinux pour mysqld (l’autre consiste à le désactiver complètement):

setsebool -P mysqld_disable_trans=1

J'ai lancé les commandes suivantes:

> chown -R mysql .
> chgrp -R mysql .
> mysql_install_db --user=mysql

J'ai démarré le démon mysql et tout a bien fonctionné par la suite.

10
Ilane

Lorsque vous téléchargez la version mysql Zip, si vous exécutez mysqld directement, vous obtiendrez cette erreur: 2016-02-18T07: 23: 48.318481Z 0 [ERREUR] Erreur irrécupérable: Impossible d'ouvrir et de verrouiller les tables de privilèges: Table 'mysql.user' n'existe pas 2016-02-18T07: 23: 48.319482Z 0 [ERREUR] Abandon

Vous devez d'abord exécuter la commande ci-dessous: mysqld --initialize

Assurez-vous que votre dossier de données est vide avant cette commande.

7
Levin

Je viens de rencontrer le même problème avec MySQL 5.7 sur OSX:

rm -rf {datadir}
mysqld --initialize --datadir {datadir}
mysqld --datadir {datadir}
3
Shuo

Si vous déplacez votre datadir, vous devez non seulement donner les nouvelles autorisations datadir, mais vous devez également vous assurer que tous les répertoires parents sont autorisés.

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

/media/*user*/Data/

et mon datadir était Databases.

J'ai dû définir des autorisations sur 771 pour chacun des supports, tilisateur et répertoires de données:

Sudo chmod 771 *DIR*

Si cela ne fonctionne pas, une autre façon de faire fonctionner mysql est de changer d’utilisateur dans /etc/mysql/my.cnf en root; bien que cela soit sans aucun doute problématique du point de vue de la sécurité.

3
Kohjah Breese

Juste cette commande suffit pour faire la magie sur centos 6.6

mysql_install_db

2
venkat sam

Pour moi, je devais faire:

yum remove mysql*

rm -rf /var/lib/mysql/
cp /etc/my.cnf ~/my.cnf.bkup

yum install -y mysql-server mysql-client

mysql_install_db

chown -R mysql:mysql /var/lib/mysql
chown -R mysql:mysql /var/log/mysql

service mysql start

Ensuite, j'ai pu revenir dans mes bases de données et les reconfigurer après les avoir subies au premier tour.

2
Pred

Dans mon cas, le chemin du dossier de données MySQL avait un caractère spécial "ç" et cela me rendait ...

Erreur fatale: impossible d'ouvrir et de verrouiller les tables de privilèges: la table 'mysql.Host' n'existe pas.

J'ai supprimé tous les caractères spéciaux et tout fonctionne.

0
Felipe Loredo

Sur CentOS EL 6 et peut-être sur des versions antérieures, il existe un moyen d'entrer dans le même pétrin.

Installez CentOS EL6 avec une installation minimale. Par exemple, j'ai utilisé kickstart pour installer ce qui suit:

%packages
@core
acpid
bison
cmake
dhcp-common
flex
gcc
gcc-c++
git
libaio-devel
make
man
ncurses-devel
Perl
ntp
ntpdate
pciutils
tar
tcpdump
wget
%end

Vous constaterez que l’une des dépendances de la liste ci-dessus est mysql-libs. J'ai trouvé que mon système a un défaut my.cnf Dans /etc Et cela contient:

[mysqld]
dataddir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

Lorsque vous créez à partir de Generic Linux (Architecture Independent), Compressed TAR Archive, votre répertoire de données par défaut est /usr/local/mysql/data, Ce qui est en conflit avec le /etc/my.cnf Déjà présent, qui définit datadir=/var/lib/mysql. De plus, le paramètre pid-file Défini dans le même fichier ne permet pas à l'utilisateur/au groupe mysql d'écrire dessus dans /var/run/mysqld.

Un remède rapide consiste à mv /etc/my.cnf /etc/my.cnf.old Qui devrait faire fonctionner votre procédure source générique.

Bien entendu, l'expérience est différente si vous utilisez les RPM sources.

0
Chris Labonne

J'ai eu le même problème en essayant de démarrer le serveur et j'ai suivi la solution "vérifiée". Mais toujours eu le problème. Le problème était que mon fichier /etc/my.cnf ne pointait pas vers mon datadir désigné, tel que défini lorsque j'ai exécuté mysql_install_db avec --datadir défini. Une fois que j'ai mis à jour cela, le serveur a démarré correctement.

0
zagatztu

Si vous avez un serveur qui exécutait volontiers MySQL, mais donne maintenant cette erreur, une désinstallation et une réinstallation de MySQL sont excessives.

Dans mon cas, le serveur est mort et a emporté quelques blocs de disque. Cela a affecté quelques fichiers, notamment /var/lib/mysql/mysql/Host.frm et /var/lib/mysql/mysql/proc.frm.

Heureusement, je pouvais les copier depuis un autre serveur, ce qui m'a permis de dépasser l'erreur de table.

0
Nigel Pearson

J'ai une erreur similaire sur overlayfs (overlay2) qui est la valeur par défaut sur Docker pour Mac. L'erreur se produit lors du démarrage de mysql sur l'image, après la création d'une image avec mysql.

2017-11-15T06:44:22.141481Z 0 [ERROR] Fatal error: Can't open and lock privilege tables: Table storage engine for 'user' doesn't have this option

Le passage à "aufs" a résolu le problème. (Sur Docker pour Mac, le fichier "daemon.json" peut être modifié en choisissant le menu "Préférences ...", en sélectionnant l'onglet "Démon" et en sélectionnant l'onglet "Avancé".)

/etc/docker/daemon.json:

{
  "storage-driver" : "aufs",
  "debug" : true,
  "experimental" : true
}

Ref:

https://github.com/moby/moby/issues/355

https://qiita.com/Hige-Moja/items/7b1208f16997e2aa9028

0
Tsuneo Yoshioka