Nie można znaleźć mysql.sock


82

Musiałem tylko przeinstalować mysql i mam problem z jego uruchomieniem. Nie może znaleźć gniazda (mysql.sock). Problem w tym, że ja też nie. W terminalu Mac OS X 10.4 wpisuję: locate mysql.socki wracam /private/tmp/mysql.sock. Ma sens, że plik gniazda istnieje w tej lokalizacji, ale w rzeczywistości tak nie jest.

  1. Jak mogę znaleźć plik gniazda?

  2. Jeśli locate zwraca fałszywą lokalizację, musi mieć jakąś pamięć i prawdopodobnie indeksy. Jak mogę odświeżyć ten indeks?


1
/Applications/XAMPP/xamppfiles/var/mysql/mysql.sock
Máxima Alekz

Odpowiedzi:


139

aby odpowiedzieć na pierwszą część twojego pytania:

biegać

% mysqladmin -p -u <user-name> variables

i sprawdź zmienną „gniazdo”


1
Gdybym mógł, całkowicie zmieniłbym tę odpowiedź na właściwą. Gdybym tylko wiedział o tym wcześniej!
Steph Rose

50
Pobiegł mysqladmin variables. Co robić gdy error: 'Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)'? :)
Alexander Wallin

Otrzymuję ten sam błąd co @afEkenholm i nie mogłem znaleźć rozwiązania. Pobiegłem sudo find / -name mysql.sockz katalogu głównego i nie mogłem znaleźć mysql.sock w dowolnym miejscu w systemie. Zainstalowałem MySQL przy użyciu 64-bitowego pliku dmg dla Mac OS 10.7. Obecnie działa Mavericks.
b_dubb

@b_dubb Jestem taka sama w Twojej sytuacji, jak rozwiązałeś swoje problemy?
MeganZhou,

1
Aby szybko sprawdzić parametr gniazda bez wykonywania wszystkich innych czynności: zmienne mysqladmin | gniazdo grep
BAR

49

To rozwiązało mój problem

mysql_config --socket

AKTUALIZACJA

mysql_config może nam powiedzieć, gdzie powinien znajdować się plik mysql.sock, ale w moim przypadku plik nie istniał. Więc usunąłem my.cnf:

sudo rm -rf /etc/my.cnf

A następnie ponownie uruchomiłem mysql:

brew services restart mysql

Plik został utworzony i mysql działa teraz dobrze.


7
To polecenie mówi ci, gdzie jest mysql.sock, która odpowiada na pytanie
Eugene Ramirez

3
To polecenie nie informuje, gdzie znajduje się plik. Informuje, gdzie mysql go szuka: ustawienie konfiguracji dla --socket.
morksinaanab

Nie mam. ls: /etc/my.cnf: No such file or directoryMoże muszę najpierw go utworzyć?
Abhi

jeśli nie masz pliku, /etc/my.cnfspróbuj obejrzeć /usr/loca/etc/my.cnf- @Abhi
rwcorbett

20

Plik gniazda powinien zostać utworzony automatycznie podczas uruchamiania demona MySQL.

Jeśli nie zostanie znaleziony, najprawdopodobniej katalog, który ma go zawierać, nie istnieje lub inny problem z systemem plików uniemożliwia utworzenie gniazda.

Aby dowiedzieć się, gdzie powinien znajdować się plik, użyj:

% mysqld --verbose --help | grep ^socket

4
Lub mysql --verbose --help | grep ^ socket
Ondrej Rafaj,

1
@Ondrej z pewnością mówi ci, gdzie klient myśli, że patrzy? Celem uruchomienia mysqldjest to, że powinien on powiedzieć, gdzie serwer go faktycznie umieścił!
Alnitak

na mojej instalacji xampp nie mogłem znaleźć demona, więc próbowałem bez niego i zadziałało :) ... co się stało za kulisami, nie mam pojęcia ...
Ondrej Rafaj


10

Moim problemem był również plik mysql.sock.

Podczas procesu instalacji drupal musiałem powiedzieć, której bazy danych chcę użyć, ale moja baza danych nie została znaleziona

mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock

system szuka mysql.sock, ale znajduje się w złym katalogu

wystarczy, że połączysz go;)

Sporo czasu zajęło mi wygooglowanie wszystkich ważnych informacji, ale zajęło mi nawet godziny, aby dowiedzieć się, jak się dostosować, ale teraz mogę przedstawić wynik: D

ps: jeśli chcesz być dokładnie, musisz połączyć swoje /tmp/mysql.sock-file(jeśli znajduje się tam również w twoim systemie) do katalogu podanego przez php.ini (lub php.default.ini), gdziepdo_mysql.default_socket= ...


Po zmianie w php.ini pdo_mysql.default_socketmusisz zrestartować serwer WWW, aby zmiany zostały załadowanesudo apachectl restart
Szekelygobe

5

Otrzymałem dokładną ścieżkę za pomocą:

netstat -ln | grep -o -m 1 -E '\S*mysqld?\.sock'

Ponieważ zwraca to tylko ścieżkę i nie wymaga żadnych danych wejściowych, możesz go potencjalnie użyć w skrypcie powłoki.

Aby to zadziałało, na komputerze musi być aktualnie uruchomiony MySQL. Działa również dla MariaDB.


Świetna odpowiedź! To faktycznie znajduje lokalizację gniazda, w przeciwieństwie do innych odpowiedzi.
Tyler Christian

2

Wydaje się, że pierwotne pytania wynikają z nieporozumień dotyczących a) gdzie jest plik i b) gdzie jest poszukiwany (i dlaczego nie możemy go tam znaleźć, gdy wykonujemy locate lub grep). Myślę, że celem Alnitaka było to, że chcesz znaleźć miejsce, z którym był powiązany - ale grep nie pokaże ci linku, prawda? Plik tam nie istnieje, ponieważ jest to link, a to tylko wskaźnik. Nadal musisz wiedzieć, gdzie umieścić link.

mój plik sock jest na pewno w / tmp, a BŁĄD, który otrzymuję, szuka go w / var / lib / (nie tylko / var). Połączyłem teraz z / var i / var / lib i nadal otrzymuję błąd „Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo 'var / lib / mysql.sock' (2)”.

Zwróć uwagę na (2) po błędzie .... Znalazłem w innym wątku, że oznacza to, że gniazdo rzeczywiście mogło zostać użyte, ale coś jest nie tak z samym gniazdem - więc zamknąć maszynę - całkowicie - tak, że gniazdo zamyka się. Następnie ponowne uruchomienie powinno to naprawić. Próbowałem tego, ale u mnie nie zadziałało (teraz pytam czy restartowałem za szybko? Naprawdę?) Może to będzie rozwiązanie dla kogoś innego.


1
$ mysqladmin variables | grep sock

Spróbuj tego zamiast tego, to zwróci żądany wynik, usuwając niepowiązane informacje.


0

Aby odświeżyć bazę danych lokalizacji, uruchomiłem

/usr/libexec/locate.updatedb

0

(Q1) Jak mogę znaleźć plik gniazda?

Domyślną lokalizacją dla pliku gniazda jest /tmp/mysql.sock, aby znaleźć plik gniazda dla twojego systemu, użyj tego.

mysqladmin variables | grep socket

Jeśli właśnie zainstalowałeś MySql, plik mysql.sock nie zostanie utworzony, dopóki serwer nie zostanie uruchomiony. Użyj tego polecenia, aby go uruchomić.

sudo launchctl load -F /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist

Jeśli pojawi się monit o hasło, możesz podać nazwę użytkownika root lub inną podobną nazwę użytkownika. Terminal poprosi o podanie hasła.

mysqladmin --user root --password variables | grep socket

(Q2) Jak mogę odświeżyć lokalizację indeksu

Odśwież lokalizację bazy danych za pomocą tej komendy.

sudo /usr/libexec/locate.updatedb

0

Otrzymuję ten sam błąd w systemie Mac OS X 10.11.6:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Po wielu męczarniach i przekopaniu się przez porady tutaj i powiązane pytania, z których żadna nie rozwiązała problemu, wróciłem i usunąłem zainstalowane foldery i po prostu to zrobiłem brew install mysql.

Nadal pojawia się ten sam błąd w przypadku większości poleceń, ale to działa:

/usr/local/bin/mysqld

i zwraca:

/ usr / local / bin / mysqld: gotowy do połączeń.

Wersja: „5.7.12” gniazdo: „/tmp/mysql.sock” port: 3306 Homebrew


0

W ogóle nie mogłem znaleźć gniazda mysql, więc ponownie zainstalowałem serwer mysql (wszystkie tabele i ustawienia phpmyadmin zostały zachowane). Oto polecenia:

1) Zainstaluj

sudo apt-get install mysql-server

2) Postępuj zgodnie z krokami konfiguracji terminala

sudo mysql_secure_installation

3) Sprawdź stan: (Powinien zwrócić „Aktywny: aktywny (działa)”)

status systemctl mysql.service


0

Niestety żadna z powyższych nie zadziałała w moim przypadku. Ale w końcu znalazłem rozwiązania.

Aby dowiedzieć się, gdzie jest plik mysql.sock, po prostu otwórz menedżera xampp, wybierz MySQL i kliknij Konfiguruj po prawej stronie. Na panelu konfiguracji kliknij Otwórz plik konf i po prostu wyszukaj mysql.sock, naciskając skrót CMD + F.

W moim przypadku właściciel mysql.sock został zmieniony i musiałem zmienić go z powrotem na administratora root za pomocą: chmod root: admin mysql.sock

Następnie uzyskano dostęp do bazy danych.


-4

Nie mogę pomóc w pytaniu nr 1, ale aby odświeżyć locatebazę danych plików, uruchom:

updatedb
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.