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?

Mas
quelle

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

GeckoSEO
quelle
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.

Bilderstürmer
quelle
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
Mas
quelle
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.

user3076142
quelle
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.

Paul
quelle
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.

ugo
quelle
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

Vikash Kumar
quelle
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.

Kamesh Jungi
quelle
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.

Balkrushna Patil
quelle
-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.

webjawns.com
quelle