centos: Ein weiterer MySQL-Daemon, der bereits mit demselben Unix-Socket ausgeführt wird


77

Ich habe einen seltsamen Fehler beim Starten des mysqld-Dienstes:

Another MySQL daemon already running with the same unix socket.

Ich habe versucht, laufende Dienste aufzulisten und zu stoppen, aber der gleiche Fehler tritt beim Starten des mysqld-Dienstes auf.

Ich kann versuchen, mysqld zu entfernen und neu zu installieren, aber wird dadurch auch die Datenbank entfernt?

Antworten:


228

Um das Auftreten des Problems zu verhindern, müssen Sie den Server ordnungsgemäß über die Befehlszeile herunterfahren, anstatt den Server auszuschalten.

# shutdown -h jetzt

Dadurch werden die laufenden Dienste gestoppt, bevor der Computer ausgeschaltet wird.

Basierend auf Centos besteht eine zusätzliche Methode, um es wieder herzustellen, wenn Sie auf dieses Problem stoßen, darin, mysql.sock zu verschieben:

# mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

# service mysqld start

Durch einen Neustart des Dienstes wird ein neuer Eintrag mit dem Namen mqsql.sock erstellt


5
Die zweite Empfehlung oben hat bei mir funktioniert. Muss passiert sein, weil ich den Server nicht ordnungsgemäß heruntergefahren habe. Ein # rebootProblem zu lösen hat das Problem nicht gelöst. Nie versucht , denshutdown -h now
fred

5
"shutdown -h now" und boot haben es für mich nicht gelöst, aber die Option "CentOS" hat wie ein Zauber funktioniert.
PJ Brunet

2
Führen Sie das # mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bakdann durch # shutdown -h nowund es sollte gut kommen.
Michael Stramel

Das Verschieben der Sockendatei hat auch bei mir funktioniert. Die große Frage, die ich habe, ist, wie das passiert ist. Ich habe dieses Problem noch nie gesehen.
Sstringer

Weiß jemand, wie dieses Problem aufgetreten sein könnte?
Axiom82

19

TL; DR:

Führen Sie dies als root aus und Sie sind fertig:

rm $(grep socket /etc/my.cnf | cut -d= -f2)  && service mysqld start

Längere Version:

Sie können den Speicherort der Socket-Datei von MySQL finden, indem Sie manuell darin stöbern /etc/my.confoder einfach verwenden

grep socket /etc/my.cnf | cut -d= -f2

Es ist wahrscheinlich /var/lib/mysql/mysql.sock. Dann (natürlich als root oder mit sudovorangestelltem) entfernen Sie diese Datei:

rm /var/lib/mysql/mysql.sock

Starten Sie dann den MySQL-Daemon:

service mysqld start

Durch Entfernen mysqldwird das Problem überhaupt nicht behoben. Das Problem ist, dass CentOS & RedHat die sockDatei nach einem Absturz nicht bereinigen , sodass Sie dies selbst tun müssen. Es wird (natürlich) auch empfohlen, das Ausschalten Ihres Systems zu vermeiden, aber manchmal können Sie es nicht vermeiden, sodass dieses Verfahren das Problem löst.


Das cut -d= -f2Bit wird möglicherweise falsch angezeigt, da nach dem =Vorzeichen ein Wert angezeigt wird. Dies = ist jedoch der Wert, der an die -dOption übergeben wird. Mit anderen Worten, =wird als Trennzeichen für verwendet cut.
Bilderstürmer

Wenn Sie unter Ubuntu arbeiten, versuchen Sie es /etc/my.cnfdurch /etc/mysql/my.cnf.
Bilderstürmer

Ich würde vorschlagen, etwas Spezifischeres als jede Zeile zu suchen, die zumindest den Wort- Socket enthält grep '^socket[[:space:]]=' /etc/my.cnf, oder Sie könnten am Ende etwas löschen, das Sie nicht beabsichtigt haben.
Beli

4

Ich habe eine Lösung für jeden in diesem Problem gefunden. Ändern Sie das Socket-Verzeichnis an einen neuen Speicherort in der Datei my.cnf

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

und service mysqld start

oder der schnelle Weg, wie GeckoSEO antwortete

# mv /var/lib/mysql/mysql.sock /var/lib/mysql/mysql.sock.bak

# service mysqld start

8
Ich habe gerade die Datei mysql.sock gelöscht und dann den Dienst neu gestartet.
Will Morgan

3

Meine Lösung hierfür war ein Überbleibsel von mysql.sock im Verzeichnis / var / lib / mysql / nach einem harten Herunterfahren. MySQL dachte, dass es bereits lief, als es nicht lief.


Ja, Sie haben Recht, ich habe das System heruntergefahren, dann tritt dieses Problem auf. Sie haben also eine Lösung, wenn ich den Server starte, um diesen Fehler nicht anzuzeigen
Mas

2

Öffnen Sie einfach einen Fehlerbericht mit Ihrem Betriebssystemhersteller und bitten Sie ihn, den Socket in / var / run zu setzen, damit er beim Neustart automatisch entfernt wird. Es ist ein Fehler, diesen Socket nach einem unsauberen Neustart beizubehalten. / Var / run ist der Ort für diese Art von Dateien.


1

Um die .sock-Datei automatisch zu bereinigen, platzieren Sie diese Zeilen unmittelbar nach dem Codeblock "start)" in der Datei /etc/init.d/mysqld

test -e /var/lib/mysql/mysql.sock
SOCKEXIST=$?

ps cax | grep mysqld_safe
NOPIDMYSQL=$?

echo NOPIDMYSQL $NOPIDMYSQL
echo SOCKEXIST $SOCKEXIST

if [ $NOPIDMYSQL -eq 1 ] && [ $SOCKEXIST -eq 0 ] ; then
    echo "NOT CLEAN"
    rm -f /var/lib/mysql/mysql.sock
    echo "FILE SOCK REMOVED"
else
    echo "CLEAN"
fi

es hat bei mir funktioniert. Ich musste dies tun, weil ich keine USV habe und oft Stromausfälle auftreten.

Grüße.


Das Obige ist der richtige Weg, da es außerhalb unserer Kontrolle passiert, dass die Stromversorgung ausfällt und die USV nach einer Weile ausfällt. Der Server muss sich also erholen. Ich habe dieses Problem bei einer Installation von MySQL 5.7 (Centos 6), aber nicht bei einer Installation von 5.1 (Centos 5). Ich habe keine Zeit zu untersuchen, was mit dem ersten falsch ist, also werde ich diese Antwort nur verbessern und sie verwenden. teste -e $ socketfile wenn [$? -eq 0]; dann
ciuly

sieht aus wie es hat mich mehr als 5 min die Pastebin vorzubereiten: hier ist es pastebin.com/DpiSGrmh
ciuly

1

Es kann vorkommen, dass der MySQL-Dienst während des Neustarts des Betriebssystems nicht ordnungsgemäß heruntergefahren wird. Die Datei /var/lib/mysql/mysql.sock wurde verlassen. Dies verhindert, dass 'mysqld' gestartet wird.

Diese Schritte können helfen:

1: service mysqld start killall -9 mysqld_safe mysqld service mysqld start

2: rm /var/lib/mysql/mysql.sock service mysqld start


0

Um den MySQL-Dienst zu starten, können Sie '/var/lib/mysql/mysql.sock' entfernen und den MySQL-Dienst erneut starten:

Entfernen Sie die Socket-Datei:

[root@server ~]# rm /var/lib/mysql/mysql.sock
rm: remove socket `/var/lib/mysql/mysql.sock'? yes

Starten Sie den MySQL-Dienst:

[root@server~]# service mysqld start
Starting mysqld:                                           [  OK  ]

Es wird Ihnen helfen, Ihr Problem zu lösen.


0

Es ist nur wegen einer abnormalen Beendigung des MySQL-Dienstes passiert. Löschen oder sichern Sie die Datei /var/lib/mysql/mysql.sock und starten Sie mysql neu.

Bitte lassen Sie mich wissen, wenn es Probleme gibt.


-1

Ich habe gerade dieses Problem durchgearbeitet und keiner der Vorschläge hat mein Problem gelöst. Während ich MySQL beim Booten nicht starten konnte und dieselbe Meldung in den Protokollen fand ("Ein anderer MySQL-Daemon läuft bereits mit demselben Unix-Socket"), konnte ich den Dienst starten, sobald ich an der Konsole ankam.

In meiner Konfigurationsdatei habe ich die folgende Zeile gefunden : bind-address=xx.x.x.x. Ich entschied mich zufällig, es auskommentieren zu lassen, und der Fehler beim Booten verschwand. Da die Bindungsadresse in gewisser Weise Sicherheit bietet, habe ich beschlossen, sie weiter zu untersuchen. Ich habe die IP-Adresse des Geräts anstelle der IPv4-Loopback-Adresse verwendet 127.0.0.1.

Kurz gesagt, durch die Verwendung 127.0.0.1als bind-addresskonnte ich diesen Fehler beheben. Ich hoffe, dies hilft denen, die dieses Problem haben, es aber mit den oben aufgeführten Antworten nicht lösen können.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.