Frage Was sollte mysqld.sock enthalten, warum habe ich es nicht?


Weiß jemand warum meine? /var/run/mysqld/mysqld.sock Socket-Datei wäre nicht auf meinem Computer, wenn ich MySQL 5.1 installiere (oder neu installiere)?

Gerade jetzt, wenn ich versuche, einen Server mit mysqld zu starten, erhalte ich Fehler wie Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect, aber das Erstellen einer leeren Datei mit diesem Namen (wie in den Ubuntu-Foren vorgeschlagen) war nicht erfolgreich.

Ich hatte sowohl mysql als auch postgres in Ordnung, bis ich vor einiger Zeit auf natty upgraden konnte; Ich habe Stunden damit verbracht, durch beide Datenbanken zu laufen, um herauszufinden, was vor sich geht. Ich kann postgres aufgeben, aber ich kann nicht ohne eine funktionierende Kopie von mysql arbeiten.

Der seltsamste Teil: Ich benutze Kubuntu, und mein Verständnis ist, dass KDE mysql verwendet, um Benutzerberechtigungen usw. zu speichern. Ich habe keine merkwürdigen Berechtigungsprobleme; kann ich damit meinen, dass (irgendwie?) MySQL tatsächlich funktioniert?

Vielleicht leben diese Socket-Dateien an einem anderen Ort in Natty? Wäre es einfacher, das Betriebssystem neu zu installieren? An dieser Stelle bin ich offen für alle Vorschläge, die aufhören, meine Zeit zu verschwenden.


19
2018-06-10 23:04


Ursprung


Sie müssen zuerst den mysql-Server und dann diese Datei starten /var/run/mysqld/mysqld.sock wird erstellt. Als was @Paul sagte, müssen Sie alle Dateien entfernen, die Sie an diesem Ort abgelegt haben. - Evan Hu


Antworten:


Eine Socket-Datei enthält keine Daten, sie transportiert sie. Es ist ein spezieller, ungewöhnlicher Dateityp, der mit speziellen Systemaufrufen / Befehlen erstellt wurde. Es ist keine gewöhnliche Datei.

Es ist wie eine Pipe, die der Server und die Clients verwenden können, um Anfragen und Daten zu verbinden und auszutauschen. Außerdem wird es nur lokal verwendet. Seine Bedeutung ist lediglich ein vereinbarter Rendezvous-Ort im Dateisystem.

Das Erstellen einer einfachen alten Datei und das Einfügen an diesem Ort kann den Server, der sie erstellt, beeinträchtigen ... und dadurch verhindern, dass lokale Clients eine Verbindung zum Server herstellen.

Ich empfehle, alle Dateien zu entfernen, die Sie an diesem Ort abgelegt haben. Die spezielle Socket-Datei wird vom Server erstellt.


15
2018-06-10 23:31



Danke für die Erklärung der Socket-Dateien und entschuldige mich für die schlecht formulierte Frage: Mein ursprüngliches Problem war, dass die Socket-Datei fehlte - der Fehler, den mysql immer warf, war Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect - egbutter
aber wie ist es geschaffen? weil ich es immer noch nicht habe ..: -eine Idee? - jpganz18
Sie haben wahrscheinlich einen mysql-Client, der erwartet, dass der Socket an diesem Ort ist, aber der Server erstellt ihn dort nicht (oder der Server läuft nicht) Wenn der Server läuft, suchen Sie in / tmp oder verwenden Sie find or locate to Finde die Socket-Datei und starte dann den mysql-Client mit -S <Pfad zur Socket-Datei> - sed_and_done


Wenn Sie angeben host=localhost, mysql client wird versuchen, sich auf mysql server mit unix named pipe anzumelden, das a erfordert .sock Datei.

Dies kann umgangen werden, indem host = 127.0.0.1 angegeben wird. Dadurch wird der mysql-Client TCP für die Verbindung zum Server verwenden.

Genommen von MySQL-Dokumentation:

mysql --host=127.0.0.1 --port=3306 --user=your_uname --password=your_pass

15
2018-02-13 15:47



Das ist eigentlich eine brillante (und dringend benötigte) Antwort, denn historisch gesehen habe ich das gesehen mysql.sock verschwinden aus keinem guten Grund in jeder MySQL-Version, mit der ich gearbeitet habe (zurück zu 4.0). Wenn das passiert, logge ich mich einfach so ein, aber ich benutze es --protocol=tcp anstatt --port. Wenn Sie mysql herunterfahren, sucht der Dienst nach der Socket-Datei. Also, läuft service mysql stop würde versagen. Um den fehlenden Socket-Datei-Kopfschmerz zu umgehen, renne ich mysqladmin -h127.0.0.1 --protocol=tcp -uroot -p shutdown. Oh, BTW, +1 !!! - RolandoMySQLDBA
Vielen Dank. Das war meine erste Antwort überall online :) Und ja. Eine alternative Methode zur Verwendung von TCP besteht in der Angabe von --protocol = tcp. - sccott


Ein Socket ist eine spezielle Pseudodatei, die für die Datenübertragung durch Lesen und Schreiben und nicht für die Datenspeicherung verwendet wird.

Die Socketdatei wird erstellt, wenn der Dienst gestartet und entfernt wird, wenn der Dienst beendet wird. Der Speicherort der Datei ist in definiert /etc/my.cnf so:

[mysqld]
socket=/var/run/mysql/mysql.sock

10
2018-06-10 23:34





In meinem Fall läuft es mysqld_safe erstellt ein neues mysqld.sock Datei.

$ cd /etc/init.d/
$ mysqld_safe

Sie werden wahrscheinlich keine prompte Rückmeldung erhalten, aber wenn Sie Ihre Sitzung neu starten, befindet sich irgendwo eine mysqld.sock-Datei. Finde es mit

$ sudo find / -type s | grep mysqld.sock

6
2017-09-06 13:16





Ich hatte das gleiche Problem mit der fehlenden mysqld.sock. Ich ging zu dem Verzeichnis, das mysql enthielt, nämlich /usr/bin in meinem Fall. Dann gab ich den Befehl aus

mysql mysql --host=localhost --password=whatever --port=3306

Das doppelte mysql ist kein Tippfehler, sondern mysql ist eine Datenbank, die immer in einer neuen MySQL-Installation vorhanden ist. Ich weiß nicht wenn --host, --password oder --port werden benötigt, aber da es für mich funktioniert hat, verwende ich diese Parameter. Sobald MySQL aufkam, ging ich in die Benutzertabelle und setzte das Passwort für root. Sobald MySQL aufkam, wurde die fehlende Socket-Datei erstellt. Ich hoffe, das hilft jemandem seit ich tagelang gekämpft habe.


1
2017-12-25 04:00





Wenn Sie nginx php-fastcgi verwenden und Sie haben 502 Bad Gateway Error Dann müssen Sie sich die Konfiguration Ihres virtuellen Hosts in der nginx-Konfigurationsdatei ansehen. Sie müssen einstellen oder korrigieren fastcgi_pass Parameter fastcgi_pass ist die Variable zum Festlegen der Socket-Verbindung zwischen nginx und php CGI.

Ein weiterer Problempunkt ist, dass das binäre Starter-Skript könnte verpasste die folgenden Einträge (wichtig) öffnen mit: nano /usr/bin/php-fastcgi

SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid

Der komplette Inhalt meines Starter-Skripts / usr / bin / php-fastcgi:

#!/bin/bash

FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid
CHILDREN=6
PHP5=/usr/bin/php5-cgi

/usr/bin/spawn-fcgi -s $SOCKET -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5

0
2018-05-22 13:48