web-dev-qa-db-fra.com

ne peut pas démarrer mysqld sur centos car je n'arrive pas à trouver mysql.sock

Bonjour, quand j'essaye de démarrer mon mysqld, j'obtiens cette erreur:

[root@localhost /]# service mysqld restart
Stopping mysqld:                                           [  OK  ]
MySQL Daemon failed to start.
Starting mysqld:                                           [FAILED]

la raison principale est que le fichier my.cnf ne trouve pas mon fichier mysql.sock.

[root@localhost /]# mysqladmin -u root -p status

mysqladmin: connect to server at 'localhost' failed

error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)'
Check that mysqld is running and that the socket: '/var/lib/mysql/mysql.sock' exists!

Quand j'essaye de le rechercher avec:

Sudo find / -type s | grep mysqld.sock

J'aurais

find: ‘/proc/3253/task/3253/fd/5’: Bestand of map bestaat niet 
find: ‘/proc/3253/task/3253/fdinfo/5’: Bestand of map bestaat niet
find: ‘/proc/3253/fd/5’: Bestand of map bestaat niet
find: ‘/proc/3253/fdinfo/5’: Bestand of map bestaat niet

"Bestand of map bestaat niet" == "File or directory don't exists"

Je suis nouveau dans ce domaine alors quelqu'un peut-il m'aider s'il vous plaît?

8
Yannick

Quelle douleur! Je suis tombé sur le même problème (sur RedHat) et cela m'a aidé:

service mysqld stop
rm -rf /var/lib/mysql/*
service mysqld start
mysql_secure_installation

J'espère que cela pourra aider. Bonne chance!

19
Barmaley

"La raison principale est que le fichier my.cnf ne trouve pas mon fichier mysql.sock."

Nan. "LA RAISON PRINCIPALE" est mysqld has not started, il n'y a donc pas mysql.sock et aucun client ne peut établir de connexion.

Actuellement, "pourquoi mysqld failds" est une vaste question. Le journal des erreurs MySQL a la raison "Pourquoi MySQL échoue". Si vous savez où se trouve le journal des erreurs mysql, ouvrez-le simplement et postez un message d'erreur dans votre question.

Mais probablement je suppose que vous ne savez pas où se trouve le journal des erreurs mysql ....

Identifie l'emplacement du journal des erreurs mysql

Nous devons donc identifier où il se trouve. on pourrait deviner quelque part ... mais l'approche exacte utilise strace

$ strace -f > strace.log 2>&1 service mysqld start

maintenant strace.log a tous les appels système liés à MySQL Deamon. ouvrez strace.log avec n’importe quel éditeur et cherchez 'err' '. dans mon cas

[pid 26976] open("/XXX/hostname.err", O_WRONLY|O_CREAT|O_APPEND, 0666) = 3

lorsque open () échoue

Cela pourrait arriver open() échoue, erreur commune est 

  • '2' pour 'aucun fichier ou répertoire de ce type' signifie 'il n'y a pas de répertoire/XXX.
  • '3' pour 'autorisation refusée' signifie que vous (ou l'utilisateur dans my.cnf) ne disposez pas de l'autorisation en écriture sur 'XXX'

afin que vous puissiez trouver pourquoi mysqld ne démarre pas dans '/XXX/hostname.err'. nous apprécions hautement si vous postez un message d'erreur. 

p.s.

J'ai testé strace avec 

$ strace -f > strace.log 2>&1 mysql.server start

Pas sûr de travailler avec service mysqld, mais aucune raison de ne pas travailler

METTRE À JOUR

"Je ne reçois rien en retour avec: $ strace -f> strace.log 2> & 1 service mysqld start"

En fait, service mysqld start appelle /etc/rc.d/init.d/mysqld start (en supposant que CentOS ou Fedora). alors, vous pouvez essayer.

$ strace -f > strace.log 2>&1 /etc/rc.d/init.d/mysqld start

Si my.cnf que vous avez référencé est le bon fichier pour mysqld, ouvrez-le et recherchez la section [mysqld]. Il ressemble à ce qui suit

[mysqld]
user    = username
port    = 1111
basedir = /path/
datadir = /path/data

Le journal des erreurs MySQL est dans /path/data

3
Jason Heo

Merci Barmaley, pour cette réponse géniale. J'ai vérifié mon fichier mysqld.log. 

Il montre toutes les raisons pour lesquelles mon service mysql ne démarre pas. Dans mon cas, l'utilisateur mysql n'a pas le droit d'écriture sur "/ var/run/mysqld" . J'ai donné la permission à l'utilisateur mysql de l'utilisateur root et cela a fonctionné pour moi.

Merci encore! Barmaley

1
Bhushan

De votre message, il semble que mysqld n'a pas pu démarrer MySQL Daemon failed to start. Starting mysqld: [FAILED].

Vérifiez si mysqld exécute service mysqld status.

Le fichier de configuration my.cnf recherche mysql.sock et vous cherchiez mysqld.sock. Deux noms différents.

1
alvits

Je ne suis pas un expert en mysql mais la question est:

Est-ce que mysql écoute sur une prise, sur un port TCP ou les deux?

vérifiez le fichier de configuration my.cnf qui se trouve généralement dans/etc ou/etc/mysql et vous verrez ceci. De plus, s'il fonctionne déjà en tant que socket, vous verrez le chemin d'accès à la socket.

J'espère que ça aide.

Cordialement

1
Fabrizio Mazzoni

Tech mis en place: 

Vagrant (Centos 6.6, MySQL 6.6) on top of MacOS Captain

Chaque fois que j'essaie d'exécuter mysql sur Centos, je vois ce problème, mais je ne suis pas sûr. S'il s'agit uniquement de la version du système d'exploitation et de MySQL. 

Si vous ouvrez les fichiers journaux et vérifiez que vous verrez quelque chose comme ceci 

/ usr/sbin/mysqld: Le fichier '/var/log/mysql-bin.index' est introuvable (Code d'erreur: 13 - Autorisation refusée)

Cette Permission Denied est parce que, par défaut, nous n'avons pas l'autorisation d'écrire dans les fichiers/var/log. Nous devons donc modifier les autorisations pour l'utilisateur. MySQL essaie d'écrire quelque chose dans bin-log ou relay-logs situé dans /var/log/mysql.

Avant de modifier les autorisations, nous devons nous rendre compte qu'il n'y a pas de répertoire mysql dans/var/log, nous devons donc d'abord le créer, puis modifier les autorisations. Alors, j'ai fait ceci:

mkdir mysql
chown mysql: mysql

mysqld devrait commencer à fonctionner maintenant!

0
JumpMan