MySQL startet nicht mysqld.sock fehlt

8

Nachdem ich meinen Server neu gestartet hatte, wurde alles normal gestartet, außer "mysql". Ich habe versucht, ihn manuell zu starten " /etc/init.d/mysql restart" oder mit " service mysql restart", es schlägt fehl

In der Protokolldatei heißt es:

Jul 16 08:13:38 localhost /etc/init.d/mysql[18136]: error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'
Jul 16 08:13:38 localhost /etc/init.d/mysql[18136]: Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

Ich habe diesen Pfad überprüft, aber diese Socket-Datei nicht gefunden.

Mohammed Simba
quelle
Beachten Sie, dass Sie dies zum Starten nicht tun sollten restart. verwenden start. Möglicherweise besteht das Problem darin, dass das Stoppen fehlschlägt und nicht einmal versucht wird, es zu starten.
Wurtel
gleiches Problem mit restartoder " stop/start", aber kein Problem bei "Stop", da es bereits nicht läuft.
Mohammed

Antworten:

3

So finden Sie alle Socket-Dateien auf Ihrem System:

sudo find / -type s

Auf meinem MySQL-Serversystem war der Socket geöffnet /var/lib/mysql/mysql.sock

Wenn Sie herausgefunden haben, wo der Socket geöffnet wird, fügen Sie die Zeile zu Ihrer /etc/my.cnfDatei mit dem Pfad zur Socket-Datei hinzu oder bearbeiten Sie sie :

socket=/var/lib/mysql/mysql.sock

Manchmal gibt das Systemstart-Skript, das die ausführbare Befehlszeilendatei gestartet hat, ein Flag an --socket=path. Dieses Flag könnte den my.cnfSpeicherort überschreiben , und dies würde dazu führen, dass ein Socket nicht dort gefunden wird, wo die Datei my.cnf angibt, dass er sein sollte. Wenn Sie dann versuchen, den mysql-Befehlszeilenclient auszuführen, liest er my.cnf, um den Socket zu finden, findet ihn jedoch nicht, da er von dem Ort abweicht, an dem der Server einen erstellt hat. Wenn Sie sich also nicht darum kümmern, wo sich der Socket befindet, sollte es funktionieren, wenn Sie die Datei my.cnf entsprechend ändern.

Wenn Sie ein Superuser im Linux-System sind, gehen Sie wie folgt vor:

kill -9 <pid_of_mysql>

oder manchmal können Sie dies tun:

pkill -9 mysqld

Nachdem Sie dies getan haben, möchten Sie möglicherweise nach einer PID-Datei suchen /var/run/mysqld/und diese löschen

Stellen Sie sicher, dass die Berechtigungen für Ihren Socket so sind, dass jeder Benutzer, den mysqld ausführt, lesen / schreiben kann. Ein einfacher Test besteht darin, es für das vollständige Lesen / Schreiben zu öffnen und zu prüfen, ob es noch funktioniert:

chmod 777 '/var/run/mysqld/mysqld.sock'

Wenn das Problem dadurch behoben wird, können Sie die Berechtigungen und den Besitz des Sockets je nach Ihren Sicherheitseinstellungen nach Bedarf anpassen.

Außerdem muss das Verzeichnis, in dem sich der Socket befindet, für den Benutzer erreichbar sein, der den mysqld-Prozess ausführt.

Referenz: /programming/11990708/error-cant-connect-to-local-mysql-server-through-socket-var-run-mysqld-mysq

Peter Nduati
quelle
2
nichts zurückgegeben von find / -type s
MohammedSimba
sudo find / -type s Sie müssen den Befehl als root ausführen, beachten Sie auch den Abstand
Peter Nduati
1
Ja, ich habe nichts zurückgegeben
MohammedSimba
netstat -ln | awk '/mysql(.*)?\.sock/ {print $ 9}'
Peter Nduati
1
leeres Ergebnis :(
MohammedSimba
3

Ich habe versucht, MySQL im "abgesicherten Modus" zu starten, um die Sock-Datei und die PID-Datei zu erstellen, aber es schlägt fehl, wenn ein Fehler "bind" auftritt.

  1. Ich habe die IP-Adresse im Parameter "bind ip" in my.cnf in localhost geändert
  2. MySQL im abgesicherten Modus gestartet.
  3. MySQL im normalen Modus neu gestartet, und alles ging gut.
Mohammed Simba
quelle
Ändern Sie den bind ipParameter in my.cnfvon 127.0.0.1, localhostum meinen Tag zu retten
Nolwennig
1

Ja, wie oben erwähnt, #find / -type ssuchen Sie zuerst Ihre Socket-Datei . Wenn Sie eine Datei mysqld.sock unter / var / run / mysqld / gefunden haben, überprüfen Sie, ob Instanzen von mysqld ausgeführt werden oder nicht, #netstat -anpt | grep 3306 or #ps aux | grep mysqldwenn Sie einen laufenden Prozess gefunden haben, der sie stoppt (#kill - 9 pid) und entfernen Sie die Socket-Datei. Versuchen Sie dann, es neu zu starten, und wenn MySQL keine Socket-Datei erstellt, versuchen Sie, es wie folgt zu starten

#/usr/sbin/mysqld --defaults-file=/etc/mysql/my.cnf --basedir=/usr --datadir=/var/lib/mysql --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock

Überprüfen Sie auch Ihre my.cnf-Datei (/etc/mysql/my.cnf) und kommentieren Sie das Feld für die Bindungsadresse. Wenn Sie ein Feld zum Überspringen des Netzwerks gefunden haben, kommentieren Sie es.

sreejith KB
quelle