240 votes

mysqld_safe Le répertoire '/var/run/mysqld' pour le fichier socket UNIX n'existe pas.

Lors du démarrage du serveur mysql 5.7.17 en utilisant mysqld_safe, l'erreur suivante se produit.

2017-02-10T17:05:44.870970Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-10T17:05:44.872874Z mysqld_safe Logging to '/var/log/mysql/error.log'.
2017-02-10T17:05:44.874547Z mysqld_safe Directory '/var/run/mysqld' for UNIX socket file don't exists.

Comment le réparer ?

610voto

Matt Clark Points 5017

Il semble étrange que ce répertoire n'ait pas été créé lors de l'installation - avez-vous modifié manuellement le chemin du fichier socket dans le my.cfg ?

Avez-vous essayé de créer simplement ce répertoire vous-même, et de redémarrer le service ?

mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld

2 votes

Non, je n'ai fait aucune modification manuellement. Je vais essayer en créant un répertoire. Merci pour les suggestions

23 votes

Cela se produit sous mysql 5.7. Lorsque vous arrêtez le service mysql, /var/run/mysqld est supprimé et est recréé lorsque vous redémarrez le service.

4 votes

J'ai dû utiliser sudo pour les deux

102voto

Partha Sen Points 1210

Lorsque j'ai utilisé le code mysqld_safe --skip-grant-tables & mais je reçois l'erreur :

mysqld_safe Le répertoire '/var/run/mysqld' pour le fichier socket UNIX n'existe pas.

$ systemctl stop  mysql.service
$ ps -eaf|grep mysql
$ mysqld_safe --skip-grant-tables &

J'ai résolu le problème :

$ mkdir -p /var/run/mysqld
$ chown mysql:mysql /var/run/mysqld

Maintenant, j'utilise le même code mysqld_safe --skip-grant-tables & et obtenir

mysqld_safe Démarrage du démon mysqld avec les bases de données de /var/lib/mysql

Si j'utilise $ mysql -u root Je vais chercher :

Version du serveur : 5.7.18-0ubuntu0.16.04.1 (Ubuntu)

Copyright (c) 2000, 2017, Oracle et/ou ses affiliés. Tous droits réservés.

Oracle est une marque déposée d'Oracle Corporation et/ou de ses sociétés affiliées. Les autres noms peuvent être des marques commerciales de leurs respectifs.

Tapez "help ;" ou \h pour obtenir de l'aide. Tapez ' \c ' pour effacer la déclaration d'entrée actuelle.

mysql>

Il est maintenant temps de changer de mot de passe :

mysql> use mysql
mysql> describe user;

Lecture des informations de table pour compléter les noms de table et de colonne Vous pouvez désactiver cette fonctionnalité pour obtenir un démarrage plus rapide avec -A

Base de données modifiée

mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR root@'localhost' = PASSWORD('newpwd');

ou Si vous avez un compte mysql Root qui peut se connecter de partout, vous devriez également le faire :

UPDATE mysql.user SET Password=PASSWORD('newpwd') WHERE User='root';

Méthode alternative :

   USE mysql
   UPDATE user SET Password = PASSWORD('newpwd')
   WHERE Host = 'localhost' AND User = 'root';

Et si vous avez un compte Root auquel vous pouvez accéder de partout :

 USE mysql
 UPDATE user SET Password = PASSWORD('newpwd')
 WHERE Host = '%' AND User = 'root';`enter code here

doivent maintenant quit à partir de mysql et arrêter/démarrer

FLUSH PRIVILEGES;
sudo /etc/init.d/mysql stop
sudo /etc/init.d/mysql start

maintenant encore ` mysql -u Root -p' et utilisez le nouveau mot de passe pour obtenir

mysql>

10 votes

Depuis MySQL 5.7.6 la colonne Password a été renommée "authentication_string" Ici vous pouvez lire plus à ce sujet : bugs.mysql.com/bug.php?id=76655

1 votes

Je retire ce que j'ai dit. Chaque option de requête que tu as proposée génère une erreur de syntaxe. Mais au moins j'ai réussi à entrer avec mysqld_safe cette fois...

0 votes

Tous ceux qui arrivent ici. Sur MySQL 8.0.15 (peut-être plus tôt que cela aussi) la fonction PASSWORD() ne fonctionne pas. Veuillez voir stackoverflow.com/a/63716361/4153682 y dev.mysql.com/doc/refman/8.0/fr/resetting-permissions.html

9voto

Heli Perez Points 51

Cela fonctionne pour moi sous CentOS :

$ service mysql stop
$ mysqld --skip-grant-tables &
$ mysql -u root mysql

mysql> FLUSH PRIVILEGES;
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

$ service mysql restart

1voto

Amir Katz Points 451

Ça m'est arrivé.
Le message est en fait incorrect (et en mauvais anglais :-)).

Pour trouver le fichier incriminé, j'ai lancé cette commande (en tant que Root) :
sh -x /etc/init.d/mysqld start

Et il a imprimé ceci :

erreur : Impossible de se connecter au serveur MySQL local via le socket '/mysql-dir/mysql.sock'.
Vérifiez que mysqld fonctionne et que le socket : '/mysql-dir/mysql.sock' existe !

Il semble donc que le fichier socket doive préexister, c'est ce que j'ai fait, à nouveau comme Root :

cd /mysql-dir
touchez mysql.sock
chown mysql:mysql mysql.sock

et ensuite :
service mysqld start

Et voilà !

0voto

smilingfrog Points 127

Voir ce bogue : https://bugs.launchpad.net/ubuntu/+source/mysql-5.6/+bug/1435823

Il semble y avoir une solution temporaire

Create a newfile /etc/tmpfiles.d/mysql.conf:

# systemd tmpfile settings for mysql
# See tmpfiles.d(5) for details

d /var/run/mysqld 0755 mysql mysql -

After reboot, mysql should start normally.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X