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.
Désinstallez mysql en utilisant yum remove mysql*
Supprimer récursivement /usr/bin/mysql
et /var/lib/mysql
Supprimer le fichier /etc/my.cnf.rmp
Utilisation ps -e
pour vérifier les processus afin de s’assurer que mysql ne fonctionne toujours pas.
Redémarrez le serveur avec reboot
Courir yum install mysql-server
. Cela semble également installer le client mysql en tant que dépendance.
Donnez à mysql la propriété et les privilèges de groupe avec:
chown -R mysql /var/lib/mysql
chgrp -R mysql /var/lib/mysql
Utilisation service mysqld start
pour démarrer le démon MySQL.
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
.
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!
mysql_install_db –-user=mysql --ldata=/var/lib/mysql
Travaillé pour moi dans Centos 7
initialiser mysql avant de démarrer sous Windows.
mysqld --initialize
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.
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.
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}
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é.
Juste cette commande suffit pour faire la magie sur centos 6.6
mysql_install_db
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.
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.
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.
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.
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.
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: