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.
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:
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ć:
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:
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.
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.
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.
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)
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
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ę
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
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)
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 endwith;or\g.
Your MySQL connection id is235
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 |+-------------------------+3rowsinset(0.00 sec)
mysql>exit
Bye
eric@dev ~$
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.
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
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 516282849022600100%/
udev 156676841565921%/dev
/dev/sda3 31071247084428784443%/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!
Odpowiedzi:
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.
źródło
/etc/hosts
plik w moim kontenerze dokera pokazało mi nazwę hosta MySqlmysql
. Użycie tej samej nazwy hosta w mojej konfiguracji połączenia rozwiązało problem.Upewnij się, że usługa mysql jest uruchomiona
Następnie spróbuj wykonać jedną z następujących czynności:
(jeśli nie ustawiłeś hasła do mysql)
jeśli hasło zostało już ustawione
źródło
service mariadb start
ponieważ mariadb.org/debian-9-released-mariadb-mysql-variantJeśli plik my.cnf (zwykle w folderze etc) jest poprawnie skonfigurowany z
możesz sprawdzić, czy mysql jest uruchomiony za pomocą następującego polecenia:
spróbuj zmienić swoje uprawnienia do folderu mysql. Jeśli pracujesz lokalnie, możesz spróbować:
to dla mnie rozwiązało
źródło
Serwer MySQL nie działa lub nie jest to lokalizacja jego pliku gniazda (sprawdź my.cnf).
źródło
Najprawdopodobniej
mysql.sock
nie 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:
To rozwiązało mój problem
źródło
mysql.sock
plikuJeśli korzystasz z najnowszej wersji RHEL, być może będziesz musiał uruchomić mariadb (open source mysql db) zamiast mysql db:
Powinieneś wtedy mieć dostęp do mysql w zwykły sposób:
źródło
mariadb-server
imariadb
nie zapomnij uruchomić,mysql_secure_installation
aby wyczyścić niektóre domyślne niebezpieczne ustawienia.W moim przypadku przeniosłem plik gniazda do innej lokalizacji wewnątrz
/etc/my.cnf
z/var/lib/mysql/mysql.sock
na/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ład
ps aux | grep mysqld
Pracuje:
Nie działa:
Możesz rozwiązać ten problem, dodając tę samą linię gniazda w
[client]
sekcji w konfiguracji mysql.źródło
Po prostu edytuj
/etc/my.cnf
Dodaj następujące wiersze domy.cnf
Uruchom ponownie mysql i połącz ponownie
źródło
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.cnf
i zmodyfikuj w następujący sposób, gdzie zobaczysz linię zaczynającą się odsocket
. Zrób kopię zapasową tego pliku przed wykonaniem tej aktualizacji.Zmień na
źródło
MariaDB, opracowany przez społeczność rozwidlenie MySQL, stał się domyślną implementacją MySQL w wielu dystrybucjach.
Więc najpierw powinieneś zacząć,
Jeśli to się nie powiedzie, spróbuj
Następnie, aby uruchomić mysql,
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.
źródło
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
Pomoże to ograniczyć zużycie dysku.
źródło
innodb_buffer_pool_size
wmy.cnf
. Ustawienie małej wartości, takiej jak,innodb_buffer_pool_size = 50M
jest dobrym testem na odrzucenie tej hipotezy;)Oto, co zadziałało dla mnie:
źródło
Sprawdź, czy działa inna usługa mysql.
źródło
Upewnij się, że uruchomiłeś serwer:
Następnie połącz się z użytkownikiem root:
źródło
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 !!
źródło
próbować
źródło
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ę
źródło
Najpierw wpisz „service mysqld start” i zaloguj się
źródło
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
źródło
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:
Biegać:
Testuj jako root:
mysql powinien teraz być uruchomiony.
Mam nadzieję, że pomoże to również komuś innemu.
źródło
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:
(Używam / tmp / jako domyślnej lokalizacji gniazd)
źródło
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
źródło
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:
Musisz więc określić hosta w ten sposób:
źródło
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!
źródło
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
źródło
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.
źródło
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ń:
jeśli otrzymujesz coś takiego:
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:
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!
źródło
Musiałem wyłączyć
explicit_defaults_for_timestamp
z mojego.cnf.źródło
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
Sprawdź dostępne miejsce w / var /
Jeśli katalog jest pełny, usuń niepotrzebne pliki / katalogi
Prawdopodobnie Twój problem zostanie teraz rozwiązany.
źródło
Jeśli jesteś w powłoce sf.net , spróbuj:
Zmień {LIST} i {ID GRUPY}, jak pokazano w bazie danych MySQL profilu administratora projektu.
źródło