Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo homebrew


109

Niedawno próbowałem zainstalować MySQL za pomocą homebrew ( brew install mysql) i kiedy próbuję go uruchomić, pojawia się następujący błąd:

BŁĄD 2002 (HY000): Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo '/tmp/mysql.sock' (2)

Nie ma /tmp/mysql.sockani /var/lib/mysql.sock.

Szukałem i nie znalazłem żadnego mysql.sockpliku.

Jak mogę to naprawić?


Możesz zobaczyć ten link odpowiedź GeekHades. stackoverflow.com/questions/4847069/…
GeekHades

Warzyłem, że zainstalowałem mysql i miałem ten sam problem po rozładowaniu baterii laptopa i wymuszeniu niepełnego zamknięcia. Warto uruchomić, mysqldaby sprawdzić rzeczy i upewnić się, że ostatnio MySQL poprawnie się wyłączył. Jeśli miał „brudne” zamknięcie (np. Jeśli bateria laptopa wymusza zamknięcie systemu), powinno to wyczyścić go. Następnie można uruchomić ponownie serwer MySQL: mysql.server start.
Dave Everitt,

1
Ta odpowiedź zadziałała dla mnie: stackoverflow.com/a/6378429/2641861
ArnoHolo

Zdarzyło się to po przywróceniu nowego komputera Mac Mini z kopii zapasowej Time Machine. Musiałem odinstalować mysql@5.7 i ponownie zainstalować, aby zaczął działać. Ugryzł młotek, ale był stosunkowo bezbolesny, ponieważ wszystkie moje konfiguracje zostały zachowane.
Joshua Pinter

Odpowiedzi:


93

Kiedy masz uruchomiony serwer przez

mysql.server start

powinieneś zobaczyć gniazdo w /tmp/mysql.sock . Jednak wydaje się, że system oczekuje tego w /var/mysql/mysql.sock . Aby to naprawić, musisz utworzyć dowiązanie symboliczne w / var / mysql :

sudo mkdir /var/mysql

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

To rozwiązało to dla mnie. Teraz mój phpMyAdmin działa szczęśliwie z localhost i 127.0.0.1 .

Kredyt należy do Henry'ego


1
To również rozwiązało mój problem z niepowodzeniem łączenia się Wordpressa z mySQL. Jeszcze raz dziękuję
Ayoub

20
Kiedy próbuję mysql.server start, dostaję ERROR! The server quit without updating PID file (/usr/local/var/mysql/lyahdav-C02R32HCG8WM.pid). Potrzebowałem starszej wersji MySQL, zainstalowanej przez brew install mysql@5.6.
Liron Yahdav

3
bieganie. mysql.server startnaprawiłem to dla mnie
Stylishcoder,

@Liron, czy naprawiłeś problem, z którym masz do czynienia? Stoję przed tym samym problemem bez żadnej pomocy.
Buddy

@EB Minęło trochę czasu, odkąd miałem ten problem, ale patrząc wstecz na mój komentarz, próbowałeś obejść problem, aby zainstalować starszą wersję MySQL? Poza tym niestety nie mam pomysłów.
Liron Yahdav

61

Wygląda na to, że Twój serwer mysql nie został uruchomiony. Zwykle uruchamiam polecenie zatrzymania, a następnie uruchamiam je ponownie:

mysqld stop
mysql.server start

Ten sam błąd i to działa dla mnie.


89
. BŁĄD! Serwer zakończył pracę bez aktualizacji pliku PID (/usr/local/var/mysql/myHostName.pid). ?
Pesulap

Zrobiłem mysqld &zgodnie z komentarzem powyżej, ale myślę, że prawdopodobnie zrobiłoby to to samo, ponieważ mysqld stop jestem prawie pewien, że w moim przypadku było to z powodu niewłaściwego zamknięcia.
Mitch VanDuyn

54

Zostało mi kilka katalogów z innej instalacji mysql (8.0), które nie zostały usunięte.

Rozwiązałem to, wykonując następujące czynności:

Najpierw odinstaluj mysql

brew uninstall mysql@5.6

Usuń foldery / pliki, które nie zostały usunięte

rm -rf /usr/local/var/mysql
rm /usr/local/etc/my.cnf

Zainstaluj ponownie mysql i połącz go

brew install mysql@5.6
brew link --force mysql@5.6

Włącz i uruchom usługę

brew services start mysql@5.6

3
Wielkie dzięki :) Wszystkie instrukcje zawiodły, ale twoja
Wiaczesław Loginov

1
Dziękuję - ta odpowiedź zakończyła się 24-godzinnym biciem głowy o ścianę
vladiim

1
To zadziałało również dla mnie po wypróbowaniu wszystkiego innego! Dziękuję Ci!!!! :)
Eric

1
Wygląda na to, że problemem dla mnie było to, że po poprzedniej instalacji nadal miałem / usr / local / var / mysql. Usunięcie załatwiło sprawę! Dzięki za Twoją sugestię.
themantimes8

Musiałem uruchomić krok „mysql_secure_installation” wspomniany przez homebrew, zanim ten błąd zniknął.
Searaig

27

Spróbuj połączyć się przy użyciu „127.0.0.1” zamiast „localhost”.


2
@Esteban MySQL spróbuje połączyć się z gniazdem unixowym, jeśli powiesz mu, aby połączyć się z "localhost". Jeśli powiesz mu, aby połączył się z 127.0.0.1, zmuszasz go do połączenia się z gniazdem sieciowym. Więc prawdopodobnie masz MySQL skonfigurowany tak, aby nasłuchiwał tylko gniazda sieciowego, a nie gniazda systemu plików. (Źródło: serverfault.com/a/295300/59101 )
Ardee Aram,

Pomogło mi to zmusić klienta mysql do korzystania z gniazda TCP, ponieważ uruchamiam tunel SSH na hoście lokalnym do mojej zdalnej bazy danych MySQL.
IOW

22

1) Jeśli widzisz "mysql zatrzymany" po uruchomieniu poniższego polecenia;

brew services list

2) i jeśli możesz uruchomić mysql za pomocą poniższego polecenia;

mysql server start

to znaczy; mysql może uruchomić się ręcznie, ale nie uruchamia się automatycznie po uruchomieniu systemu operacyjnego. Dodanie mysql do usług rozwiąże ten problem. Aby to zrobić, możesz uruchomić poniższe polecenie;

brew services start mysql

Następnie możesz ponownie uruchomić system operacyjny i spróbować połączyć się z mysql, aby sprawdzić, czy uruchomił się automatycznie. Zrobiłem to samo i przestałem otrzymywać poniższy błąd;

BŁĄD 2002 (HY000): Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo '/tmp/mysql.sock' (2)

Mam nadzieję, że to pomoże.


@berk pomogło w moim przypadku uzyskać reid błędu, ale wyświetlił inny błąd `` ERROR 1045 (28000): Odmowa dostępu dla użytkownika 'user' @ 'localhost' (używając hasła: NO) '
Pratik Khadka

Cześć @PratikKhadka, błąd, który teraz otrzymujesz, oznacza, że ​​mysql działa i masz problem z uwierzytelnianiem. Zgodnie z przesłanym komunikatem o błędzie używasz nazwy użytkownika jako „użytkownik” i nie używasz hasła. Powinieneś użyć prawidłowej nazwy użytkownika i hasła. Proponuję sprawdzić poniższy link; „ forums.mysql.com/read.php?34,140320,140324
Berk,

Nie ma potrzeby ponownego uruchamiania systemu operacyjnego, wystarczyło uruchomić polecenie „brew services start mysql”. Dzięki!
AKS

Cześć @AKS, masz rację. Ponowne uruchomienie nie jest wymagane, aby działało. Zredagowałem odpowiedź, aby wyjaśnić, dlaczego wymagane jest ponowne uruchomienie. Konieczne jest sprawdzenie, czy mysql uruchamia się automatycznie po uruchomieniu systemu operacyjnego. Dziękuję za zwrotną informację!
Berk

5

Plik /tmp/mysql.sockjest prawdopodobnie potokiem nazwanym, ponieważ znajduje się w folderze tymczasowym. Nazwany potok to plik specjalny, który nigdy nie jest przechowywany na stałe.

Jeśli stworzymy dwa programy i chcemy, aby jeden program wysyłał komunikat do innego programu, możemy utworzyć plik tekstowy. Mamy jeden program, który zapisuje coś w pliku tekstowym, a drugi program czyta to, co napisał nasz drugi program. Tym jest potok, z wyjątkiem tego, że nie zapisuje pliku na dysku twardym naszego komputera, IE nie przechowuje go na stałe (tak jak robimy, gdy tworzymy plik i zapisujemy go).

Socket to dokładnie to samo, co Pipe. Różnica polega na tym, że gniazda są zwykle używane w sieci - między komputerami. Socket wysyła informacje do innego komputera lub odbiera informacje z innego komputera. Zarówno potoki, jak i gniazda używają pliku tymczasowego do udostępniania, aby mogły się „komunikować”.

Trudno jest określić, którego MySql używa w tym przypadku. Nie ma to jednak znaczenia.

Polecenie mysql.server startpowinno spowodować, że 'serwer' (program) uruchomi swoją nieskończoną pętlę, która utworzy ten plik specjalny i zaczeka na zmiany ( listenna zapis).

Potem częstym problemem może być to, że program MySql nie ma uprawnień do tworzenia pliku na twoim komputerze, więc może być konieczne nadanie mu uprawnień roota

sudo mysql.server start

To działało świetnie, dzięki. Po prostu uruchomiłem mysql.server start, mysql.server stopa następnie ponownie uruchomiłem usługę przez homebrew brew services start mysql@5.7i wszystko poszło gładko.
taylorthurlow

4

Po zainstalowaniu macos mojave, musiałem wyczyścić folder mysql, /usr/local/var/mysqla następnie zainstalować go ponownie za pomocą brew install mysqlinnych uprawnień, które pojawiałyby się wszędzie.


Rozwiązałem problem z twoją odpowiedzią, zainstalowałem wcześniej mysql, a następnie próbowałem obniżyć wersję do mysql@5.6
Rodrirokr

Dzięki stary. rozwiązało też mój problem. usunięcie / usr / local / var / mysql i ponowna instalacja była dla mnie rozwiązaniem.
Oğuz Can Sertel

1
Uwaga: usunięcie /usr/local/var/mysqlspowoduje również usunięcie wszystkich istniejących baz danych!
Leonardo

3

Mam ten sam błąd i to mi pomogło:

$ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
$launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
$mysql -uroot
mysql>

3

Aby dodać do tych odpowiedzi, w moim przypadku nie miałem lokalnego serwera mySQL, działał on w kontenerze docker. Zatem plik gniazda nie istnieje i nie będzie dostępny dla klienta „mysql”.

Plik sock jest tworzony przez mysqld i mysql używa go do komunikacji z nim. Jeśli jednak twój serwer mySql nie działa lokalnie, nie wymaga pliku sock.

Podając nazwę hosta / IP, plik sock nie jest wymagany np

mysql --host=127.0.0.1 --port=3306 --user=xyz --password=xyz

3

Ponieważ spędziłem trochę czasu próbując rozwiązać ten problem i zawsze wracałem na tę stronę, szukając tego błędu, zostawię tutaj swoje rozwiązanie z nadzieją, że ktoś zaoszczędzi czas, który straciłem. Chociaż w moim przypadku używam raczej mariadb niż MySql, nadal możesz być w stanie dostosować to rozwiązanie do swoich potrzeb.

Mój problem

jest taki sam, ale moja konfiguracja jest nieco inna (mariadb zamiast mysql):

Zainstalowany mariadb z homebrew

$ brew install mariadb

Uruchomiono demona

$ brew services start mariadb

Próbowałem się połączyć i otrzymałem powyższy błąd

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

Moje rozwiązanie

dowiedz się, które my.cnfpliki są używane przez mysql(zgodnie z sugestią w tym komentarzu ):

$ mysql --verbose --help | grep my.cnf
/usr/local/etc/my.cnf ~/.my.cnf
                        order of preference, my.cnf, $MYSQL_TCP_PORT,

sprawdź, gdzie jest uruchomiony plik gniazda Unix (prawie tak, jak opisano tutaj ):

$ netstat -ln | grep mariadb
.... /usr/local/mariadb/data/mariadb.sock

(możesz chcieć grep mysqlzamiast mariadb)

Dodaj znaleziony plik gniazda ~/.my.cnf(w razie potrzeby utwórz plik) (zakładając, że ~/.my.cnfzostał wymieniony podczas uruchamiania polecenia mysql --verbose ...-command z góry):

[client]
socket = /usr/local/mariadb/data/mariadb.sock

Zrestartuj swój mariadb:

$ brew services restart mariadb

Po tym mogłem uruchomić mysql i otrzymałem:

$ mysql -uroot
ERROR 1698 (28000): Access denied for user 'root'@'localhost'

Więc zamiast tego uruchamiam polecenie z uprawnieniami superużytkownika i po wprowadzeniu hasła otrzymałem:

$ sudo mysql -uroot
MariaDB [(none)]>

Uwagi:

  1. Nie jestem do końca pewien co do grup, w których musisz dodać gniazdo, najpierw miałem go [klient-serwer], ale potem doszedłem do wniosku, że [klient] powinien wystarczyć. Więc zmieniłem to i nadal działa.

  2. Podczas uruchamiania mariadb_config | grep socketotrzymuję: --socket [/tmp/mysql.sock] co jest nieco zagmatwane, ponieważ wydaje się, że /usr/local/mariadb/data/mariadb.sockjest to rzeczywiste miejsce (przynajmniej na moim komputerze)

  3. Zastanawiam się, gdzie mogę tak skonfigurować, /usr/local/mariadb/data/mariadb.sockaby faktycznie był, /tmp/mysql.sockwięc mogę użyć ustawień domyślnych zamiast edytować moje .my.cnf(ale jestem teraz zbyt zmęczony, aby to rozgryźć ...)

  4. W pewnym momencie zrobiłem też rzeczy wymienione w innych odpowiedziach, zanim to wymyśliłem.


2

Będziesz musiał uruchomić mysql_install_db- najłatwiej jest, jeśli jesteś w katalogu instalacyjnym:

$ cd /usr/local/Cellar/mysql/<version>/ 
$ mysql_install_db

Alternatywnie, można karmić mysql_install_dbsię basedirparametr tak:

$ mysql_install_db --basedir="$(brew --prefix mysql)"

2

Napotkałem ten sam problem na moim Macu i rozwiązałem go, postępując zgodnie z poniższymi samouczkami

https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew

Ale nie zapomnij zabić lub odinstalować starej wersji, zanim przejdziesz dalej.

Polecenia:

brew uninstall mariadb

xcode-select --install

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" - See more at: https://mariadb.com/resources/blog/installing-mariadb-10116-mac-os-x-homebrew#sthash.XQoxRoJp.dpuf

brew doctor

brew update

brew info mariadb

brew install mariadb

mysql_install_db

mysql.server start

1
Proszę wyjaśnić kilkoma krótkimi przykładami, w jaki sposób podany przez Ciebie link pomógł Ci. Linki mogą znikać i dlatego może to być powód, dla którego Twoja odpowiedź może zostać usunięta.
Kurt Van den Branden

2

Po restarcie nie mogłem połączyć się z lokalnym mariadbem, wyszukiwanie również doprowadziło mnie do tej strony i chciałem podzielić się z Tobą moim rozwiązaniem.

Zauważyłem, że brakuje katalogu my.cnf.d w / usr / local / etc /.

Jest to znany błąd występujący w homebrew, który został tam opisany i rozwiązany. https://github.com/Homebrew/homebrew-core/issues/36801

szybki sposób na naprawienie: mkdir /usr/local/etc/my.cnf.d


To zadziałało dla mnie. Nie można połączyć się z lokalnym mariadbem po brew updatei ponownie uruchomić. brew services listwynik pokazywał status mariadb startedna żółto. Dzięki za wskazówkę.
nterms

1

Podczas uruchamiania mysql_secure_installation i wpisywania nowego hasła otrzymałem:


Błąd: nie można połączyć się z lokalnym serwerem MySQL przez gniazdo '/tmp/mysql.sock' (2)


Zauważyłem, próbując wykonać następujące czynności z tej odpowiedzi :

netstat -ln | grep mysql

Nic nie zwróciło, a uznałem to za oznaczające, że nie ma pliku .sock.

Tak więc dodałem następujący tekst do mojego pliku my.cnf (w /etc/my.cnf lub w moim przypadku /usr/local/etc/my.cnf ).

Pod:

[mysqld]
socket=/tmp/mysql.sock

Pod:

[client]
socket=/tmp/mysql.sock

To było oparte na tym poście .

Następnie ponownie zatrzymaj / uruchom mysql i ponów próbę mysql_secure_installation, co w końcu pozwoliło mi wprowadzić nowe hasło roota i kontynuować z innymi preferencjami konfiguracji.

Mam nadzieję, że to komuś pomoże. Człowieku, nienawidzę tych rzeczy ...


0

aby zakończyć ten wątek. dlatego MAMP (PRO) jest używany dość często

ścieżka tutaj jest

/Applications/MAMP/tmp/mysql/mysql.sock

0

Ręcznie uruchomiłem mysql w panelu preferencji systemowych, inicjując bazę danych, a następnie ją uruchamiając. To rozwiązało mój problem.


0

W moim przypadku winowajca został znaleziony w plikach dziennika:

$ tail /usr/local/var/mysql/<hostname>.lan.err
2019-09-19  7:32:21 0 [ERROR] InnoDB: redo log file './ib_logfile0' exists. Creating system tablespace with existing redo log files is not recommended. Please delete all redo log files before creating new system tablespace.
2019-09-19  7:32:21 0 [ERROR] InnoDB: Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again.

Więc zmieniłem nazwę, ib_logfile0aby pozbyć się błędu (musiałem zrobić to samo ib_logfile1później).

mv /usr/local/var/mysql/ib_logfile0 /usr/local/var/mysql/ib_logfile0_bak
mv /usr/local/var/mysql/ib_logfile1 /usr/local/var/mysql/ib_logfile1_bak
brew services restart mariadb

0

Miałem ten sam problem. Po wypróbowaniu wszystkich tych metod bez powodzenia wykonałem następujące czynności:

tail -f the-mysql-or-maria-db-error-file.err

w innej konsoli:

brew services restart mariadb

Widziałem następujący błąd:

„MAC HOMEBREW Odzyskiwanie po awarii nie powiodło się. Popraw problem (jeśli jest to na przykład błąd braku pamięci) i uruchom ponownie lub usuń dziennik tc i uruchom mysqld za pomocą”

Więc zmieniłem rozszerzenie tc.logna tc.log.txti zrestartowałem mariadb

brew services restart mariadb

i zrobione!




-1

Dla mnie zainstalowałem mariadbdawno temu, a potem zainstalowałem mysql@5.7.

Kiedy wykonałem mysql -uroot, pojawia się błąd: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

Czytanie odpowiedzi:

  • Odinstalowałem mariadb
  • Usunięto folder /usr/local/var/mysql
  • Uruchomiłem polecenie mysqld --initialize

Wtedy mogłem mysql -uroot -p

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.