Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo „/var/lib/mysql/mysql.sock” (2)


255

Podczas próby połączenia z mysql pojawia się następujący błąd:

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Czy istnieje rozwiązanie tego błędu? Co może być tego przyczyną?


Odpowiedziałem na to tutaj, proszę sprawdzić poniższy link: stackoverflow.com/a/35577309/4773290
Pratik Patil

Odpowiedzi:


222

Czy łączysz się z „localhost” lub „127.0.0.1”? Zauważyłem, że kiedy łączysz się z „localhost”, używane jest złącze gniazda, ale kiedy łączysz się z „127.0.0.1”, używane jest złącze TCP / IP. Możesz spróbować użyć „127.0.0.1”, jeśli złącze gniazda nie jest włączone / działa.


27
W takim przypadku powinieneś prawdopodobnie sprawdzić, czy Twój serwer MYSQL faktycznie działa.
Jan Thomä

3
Możesz także wymusić użycie gniazda z parametrem socket (-S z / usr / bin / mysql) i wymusić TCP / IP, podając port (-P z / usr / bin / mysql.)
Kaoru

Użycie w pełni kwalifikowanej nazwy sieci innej niż localhost działało dla mnie. Upewnij się tylko, że jest zadeklarowany w pliku „hosts” po stronie klienta.
Fabien Haddadi,

2
Uwaga dla użytkowników cygwin: jeśli klient mysql cygwin próbuje na przykład podłączyć się do lokalnego serwera mysql WAMP, użyj -h <nazwa hosta inna niż localhost>. Nie próbuj utworzyć pliku mysql.sock i zadeklarować go w jakimkolwiek pliku my.cnf, ponieważ nie zadziała.
Fabien Haddadi,

Zła nazwa hosta dała mi dokładnie ten sam błąd. Spojrzenie na /etc/hostsplik w moim kontenerze dokera pokazało mi nazwę hosta MySql mysql. Użycie tej samej nazwy hosta w mojej konfiguracji połączenia rozwiązało problem.
Stephane,

188

Upewnij się, że usługa mysql jest uruchomiona

service mysqld start

Następnie spróbuj wykonać jedną z następujących czynności:

(jeśli nie ustawiłeś hasła do mysql)

mysql -u root

jeśli hasło zostało już ustawione

mysql -u root -p

5
w nowszych wersjach debian: service mariadb startponieważ mariadb.org/debian-9-released-mariadb-mysql-variant
Zahra

2
Daj temu facetowi medal.
Siraj Alam,

To była dla mnie odpowiedź. Ponieważ używam mariadb, rozwiązaniem było uruchomienie następującego polecenia: „sudo systemctl start mariadb”. Potem było już dobrze.
mohsen

Daj @Zahra medal
Ahmed C

28

Jeśli plik my.cnf (zwykle w folderze etc) jest poprawnie skonfigurowany z

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

możesz sprawdzić, czy mysql jest uruchomiony za pomocą następującego polecenia:

mysqladmin -u root -p status

spróbuj zmienić swoje uprawnienia do folderu mysql. Jeśli pracujesz lokalnie, możesz spróbować:

sudo chmod -R 777 /var/lib/mysql/

to dla mnie rozwiązało


Działa to również dla mnie, ale czy po uaktualnieniu do najnowszej wersji pojawia się ten problem, czy mogę wiedzieć, dlaczego tak się dzieje?
Ben

sudo chmod -R 777 / var / lib / mysql / Pracowałem dla mnie z problemem, który miałem podczas uruchamiania kontenera
dokującego

23

Serwer MySQL nie działa lub nie jest to lokalizacja jego pliku gniazda (sprawdź my.cnf).


Miałem problem opisany powyżej i to był problem. Dzięki.
oshirowanen

3
Gdzie by to było dla instalacji Homebrew?
pal4life

19

Najprawdopodobniej mysql.socknie istnieje w /var/lib/mysql/.

Jeśli znajdziesz ten sam plik w innej lokalizacji, dowiązaj go symbolicznie:

Na przykład: mam to /data/mysql_datadir/mysql.sock

Przełącz użytkownika na mysql i wykonaj jak wspomniano poniżej:

su mysql

ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock

To rozwiązało mój problem


zmiana nazwy mysql.sock na coś innego, a następnie ponowne uruchomienie mysqld („service mysqld restart”), a następnie zmiana nazwy czegoś innego z powrotem na mysql.sock działało dla mnie. Niewielka zmiana tej odpowiedzi, więc dziękuję.
Analiza rozmyta

Ta odpowiedź może pomóc w zlokalizowaniu mysql.sockpliku
Nobita,

15

Jeśli korzystasz z najnowszej wersji RHEL, być może będziesz musiał uruchomić mariadb (open source mysql db) zamiast mysql db:

yum remove mysql
yum -y install mariadb-server mariadb
service mariadb start

Powinieneś wtedy mieć dostęp do mysql w zwykły sposób:

mysql -u root -p

Do Twojej wiadomości działa to również w CentOS 8.1. Po instalacji mariadb-serveri mariadbnie zapomnij uruchomić, mysql_secure_installationaby wyczyścić niektóre domyślne niebezpieczne ustawienia.
Dio Phung

13

W moim przypadku przeniosłem plik gniazda do innej lokalizacji wewnątrz /etc/my.cnf z /var/lib/mysql/mysql.sockna/tmp/mysql.sock

Nawet po ponownym uruchomieniu usługi mysqld nadal widzę komunikat o błędzie podczas próby połączenia. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Problem polega na sposobie konfiguracji klienta. Uruchomienie diagnostyki faktycznie pokaże prawidłową ścieżkę gniazda. na przykładps aux | grep mysqld

Pracuje:

mysql -uroot -p -h127.0.0.1
mysql -uroot -p --socket=/tmp/mysql.sock

Nie działa:

mysql -uroot -p
mysql -uroot -p -hlocalhost

Możesz rozwiązać ten problem, dodając tę ​​samą linię gniazda w [client]sekcji w konfiguracji mysql.


13

Po prostu edytuj /etc/my.cnf Dodaj następujące wiersze domy.cnf

[mysqld]

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

[client]

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

Uruchom ponownie mysql i połącz ponownie

mysql -u użytkownik -p hasło baza danych -h host;


Jedyna poprawna odpowiedź. Zastanawiam się, dlaczego nie ma wystarczającej liczby głosów.
CentAu

11

Sprawdź, czy usługa mysqld działa, czy nie, jeśli nie, uruchom usługę.

Jeśli twój problem nie został rozwiązany, poszukaj /etc/my.cnfi zmodyfikuj w następujący sposób, gdzie zobaczysz linię zaczynającą się od socket. Zrób kopię zapasową tego pliku przed wykonaniem tej aktualizacji.

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

Zmień na

socket=/opt/lampp/var/mysql/mysql.sock -u root

1
Cześć Sekar, wpisałem „find / -name my.cnf” i otrzymałem dwie lokalizacje. 1) /opt/lampp/etc/my.cnf 2) /etc/mysql/my.cnf. Więc, którego użyć ... Zadałem pytanie tutaj ... stackoverflow.com/questions/32437796/
Nana Partykar

7

MariaDB, opracowany przez społeczność rozwidlenie MySQL, stał się domyślną implementacją MySQL w wielu dystrybucjach.

Więc najpierw powinieneś zacząć,

$ sudo systemctl start mariadb

Jeśli to się nie powiedzie, spróbuj

$ sudo systemctl start mysqld

Następnie, aby uruchomić mysql,

$ mysql -u root -p

Na dzień dzisiejszy w Fedorze paczka nosi nazwę, mariadb a w Ubuntu nazywa sięmariadb-server .

Może być konieczne zainstalowanie go, jeśli nie jest jeszcze zainstalowany w systemie.


7

Upewnij się, że masz wystarczająco dużo miejsca /var. Jeśli demon Mysql nie jest w stanie zapisać dodatkowych informacji na dysku, serwer mysql nie uruchomi się i spowoduje to błądCan't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

Rozważ użycie

expire_logs_days = 10
max_binlog_size = 100M

Pomoże to ograniczyć zużycie dysku.


Dzięki, uruchamiam mysql na orbox virtualbox i kiedy zrobiłem zrzut mojego bd, zabrakło mi miejsca i nie mogłem uruchomić serwera mysql, kiedy usunąłem plik zrzutu, mogłem zrestartować serwer mysql.
JayCee

1
To rozwiązało dla mnie. Miałem innodb_buffer_pool_size ustawioną na bardzo wysoką wartość dla środowisk produkcyjnych, co spowodowało awarię mysql na mojej maszynie wirtualnej.
Benjamin Brizzi

1
Miałem ten problem przy korzystaniu phabricator i roztwór zmienić innodb_buffer_pool_sizew my.cnf. Ustawienie małej wartości, takiej jak, innodb_buffer_pool_size = 50Mjest dobrym testem na odrzucenie tej hipotezy;)
Yercalamarino,

To był dziwny problem, sprawdziłem wszystko oprócz miejsca na dysku. Zwolniono miejsce z / var, wróciło!
Nadjib Mami

5

Oto, co zadziałało dla mnie:

ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart


4

Upewnij się, że uruchomiłeś serwer:

mysql.server start

Następnie połącz się z użytkownikiem root:

mysql -uroot

3

Jeśli twój mysql wcześniej działał i nagle przestał działać, po prostu „uruchom ponownie” serwer.

Napotkałem ten problem na moim CentOS VPS .->

Ciągle dostawał

Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'(2)

Próbowałem wszystkich technik, w końcu ponowne uruchomienie serwera naprawiło problemy ->

shutdown -r now

Mam nadzieję że to pomoże !!



3

jeśli zmienisz pliki w / var / lib / mysql [jak kopiuj lub zamień to], musisz ustawić właściciela plików na mysql, jest to bardzo ważne, jeśli restart mariadb.service nie powiódł się

chown -R mysql: mysql / var / lib / mysql / *

chmod -R 700 / var / lib / mysql / *


2

Najpierw wpisz „service mysqld start” i zaloguj się


co chcesz powiedzieć? proszę przeczytać FAQ zanim zadasz pytanie tutaj
Freak

Odpowiedzi na to pytanie udzielono z powodzeniem trzy lata temu. Ta dokładna odpowiedź została podana pełniej w zeszłym roku.
Cairnarvon

2

Upewnij się, że poprawnie zainstalowałeś serwer MySQL, spotkałem się z tym błędem wiele razy i myślę, że debugowanie z gniazda jest skomplikowane, to znaczy, że może być łatwiej go zainstalować ponownie.

Jeśli używasz CentOS 7, oto poprawny sposób instalacji:

Przede wszystkim dodaj źródło społeczności mysql
yum install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

Następnie możesz go zainstalować yum install mysql-community-server

Zacznij od systemctl: systemctl start mysqld


1

Mój problem polegał na tym, że pomyślnie zainstalowałem mysql i działało dobrze.

Ale pewnego dnia wystąpił ten sam błąd.

Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo „/var/lib/mysql/mysql.sock” (2)

I nie istniał żaden plik mysql.sock.

To rozwiązanie rozwiązało mój problem, a mysql uruchomił się ponownie:

Zaloguj się jako root:

sudo su -

Biegać:

systemctl stop mysqld.service
systemctl start mysqld.service
systemctl enable mysqld.service

Testuj jako root:

mysql -u root -p

mysql powinien teraz być uruchomiony.

Mam nadzieję, że pomoże to również komuś innemu.


1

Zauważ, że podczas gdy mysql odczytuje informacje o lokalizacji pliku gniazda z pliku my.cnf, program mysql_secure_installation wydaje się czasami nie robić tego poprawnie.

Więc jeśli jesteś podobny do mnie i przerzucasz rzeczy podczas instalacji, możesz znaleźć się w sytuacji, w której możesz połączyć się z bazą danych za pomocą mysql, ale nic nie da się zabezpieczyć (i tak nie używać tego skryptu).

Aby to naprawić, sugestia od sreddy działa dobrze: utwórz softlink od miejsca, w którym skrypt spodziewałby się gniazda do miejsca, w którym faktycznie się znajduje. Przykład:

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

(Używam / tmp / jako domyślnej lokalizacji gniazd)


1

Działa dla mnie z następującymi zmianami

Jakakolwiek ścieżka do gniazda jest wymieniona w [mysqld] i to samo w [kliencie] w my.cnf i zrestartuj mysql

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

[klient] gniazdo = / var / lib / mysql / mysql.sock


1

Jeden ze sposobów odtworzenia tego błędu: Jeśli chciałeś połączyć się z obcym serwerem, ale zamiast tego połączyć się z nieistniejącym serwerem lokalnym:

eric@dev ~ $ mysql -u dev -p
Enter password:
ERROR 2002 (HY000): Can't connect to local MySQL server through 
socket '/var/lib/mysql/mysql.sock' (2)
eric@dev ~ $

Musisz więc określić hosta w ten sposób:

eric@dev ~ $ mysql --host=yourdb.yourserver.com -u dev -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 235
Server version: 5.6.19 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+-------------------------+
| Database                |
+-------------------------+
| information_schema      |
| mysql                   |
| performance_schema      |
+-------------------------+
3 rows in set (0.00 sec)

mysql> exit
Bye
eric@dev ~ $

1

To może być głupia sugestia, ale upewnij się, że twoja baza danych nadal jest hostowana na localhost. Na przykład, jeśli administrator sieci wybrał (lub zmienił) hosting Amazon DB, zamiast tego potrzebujesz tej nazwy hosta!


Korzystam z dostawcy hostingu 1 i 1 i dostałem ten błąd po ssh-singu do hosta. Poprawka polegała na podaniu nazwy hosta „mysql -u dbo70123521 -p --host db70313321.db.1 i 1.com db703133520”
rob

1

W moim przypadku importowałem nową bazę danych i po tym nie byłem w stanie połączyć się ponownie. W końcu zdałem sobie sprawę, że to był problem z przestrzenią.

Abyś mógł usunąć ostatnią bazę danych i rozwinąć dysk twardy lub to, co zrobiłem, przywróciłem migawkę mojej maszyny wirtualnej.

Na wypadek, gdyby ktoś uznał to za przydatne


0

napotkał ten problem podczas próby połączenia mysql w kliencie SSH i stwierdził, że dodanie ścieżki gniazda do polecenia jest pomocne, gdy konieczne jest przełączanie między gniazdami.

> mysql -u user -p --socket=/path/to/mysql5143.sock

0

Jest to problem, jeśli brakuje miejsca na dysku. Rozwiązaniem jest zwolnienie miejsca na dysku twardym.

Przeczytaj więcej, aby uzyskać wyjaśnienie:

Jeśli korzystasz z MySQL w LINUX, sprawdź wolne miejsce na dysku twardym za pomocą wolnego dysku poleceń:

 df 

jeśli otrzymujesz coś takiego:

Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/sda2              5162828   4902260         0 100% /
udev                    156676        84    156592   1% /dev
/dev/sda3              3107124     70844   2878444   3% /home

To jest problem i teraz masz rozwiązanie!

Ponieważ mysql.sock chce zostać utworzony w folderze mysql, który prawie zawsze znajduje się w folderze głównym, nie można go osiągnąć z powodu braku miejsca.

Jeśli okresowo wydajesz komendę ls w katalogu mysql (w openSUSE 11.1 znajduje się w / var / lib / mysql), otrzymasz coś takiego:

hostname:/var/lib/mysql #
.protected  IT     files        ibdata1             mysqld.log  systemtemp
.tmp        NEWS   greekDB      mysql               mysqld.pid  test
ARXEIO      TEMP1  ib_logfile0  mysql.sock          polis
DATING      deisi  ib_logfile1  mysql_upgrade_info  restore

Plik mysql.sock pojawia się i znika często (musisz spróbować przydzielić za pomocą ls, aby trafić do instancji z plikiem mysql.sock w folderze).

Jest to spowodowane niewystarczającą ilością miejsca na dysku.

Mam nadzieję, że pomogę niektórym ludziom !!!! Dzięki!


0

Musiałem wyłączyć explicit_defaults_for_timestampz mojego.cnf.


0

Wypróbuj pierwsze 2, 3 rozwiązania. Błąd jest nadal wyskakujący i jeśli nie możesz znaleźć/var/lib/mysql/mysql.sock

find /var/ -name mysql.sock

Sprawdź dostępne miejsce w / var /

df

Jeśli katalog jest pełny, usuń niepotrzebne pliki / katalogi

rm /var/cache/*

Prawdopodobnie Twój problem zostanie teraz rozwiązany.


0

Jeśli jesteś w powłoce sf.net , spróbuj:

mysql --host=mysql-{LETTER} --user={LETTER}{GROUP ID}admin -p

Zmień {LIST} i {ID GRUPY}, jak pokazano w bazie danych MySQL profilu administratora projektu.

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.