Kiedy próbowałem połączyć się z lokalnym serwerem MySQL podczas mojego zestawu testów, kończy się to niepowodzeniem z błędem:
OperationalError: (2002, "Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)")
Jednak zawsze mogę połączyć się z MySQL, uruchamiając mysql
program wiersza poleceń
. A ps aux | grep mysql
pokazuje, że serwer jest uruchomiony, a
stat /tmp/mysql.sock
potwierdza, że gniazdo istnieje. Ponadto, jeśli otworzę debugger w except
klauzuli tego wyjątku, będę w stanie niezawodnie połączyć się z dokładnie tymi samymi parametrami.
Ten problem odtwarza się dość niezawodnie, jednak nie wydaje się, aby był w 100%, ponieważ co raz na niebieskim księżycu mój zestaw testowy w rzeczywistości działa bez tego błędu. Kiedy próbowałem z sudo dtruss
nim biegać , nie rozmnażałem się.
Cały kod klienta jest w Pythonie, chociaż nie wiem, jakie to ma znaczenie.
Przełączenie do korzystania z hosta 127.0.0.1
powoduje błąd:
DatabaseError: Can't connect to MySQL server on '127.0.0.1' (61)
max_connections
swój plik konfiguracyjny MySQL?mysql -h 127.0.0.1
pracę z linii poleceń? Nie jestem pewien, czy Twój serwer mysql faktycznie nasłuchuje na porcie TCP.mysql -h localhost
działa niezawodnie?Odpowiedzi:
To zadziałało dla mnie. Jeśli jednak to nie zadziała, upewnij się, że mysqld działa i spróbuj się połączyć.
źródło
Odpowiednia sekcja podręcznika MySQL znajduje się tutaj . Zacząłbym od wykonania wymienionych tam kroków debugowania.
Pamiętaj też, że localhost i 127.0.0.1 to nie to samo w tym kontekście:
localhost
, używane jest gniazdo lub potok.127.0.0.1
, klient jest zmuszony do korzystania z protokołu TCP / IP.Na przykład możesz sprawdzić, czy twoja baza danych nasłuchuje połączeń TCP vi
netstat -nlp
. Wydaje się prawdopodobne, że nasłuchuje połączeń TCP, ponieważ mówisz, żemysql -h 127.0.0.1
działa dobrze. Aby sprawdzić, czy możesz połączyć się z bazą danych za pośrednictwem gniazd, użyjmysql -h localhost
.Jeśli nic z tego nie pomaga, prawdopodobnie musisz opublikować więcej szczegółów na temat konfiguracji MySQL, dokładnego sposobu tworzenia wystąpienia połączenia itp.
źródło
localhost
jako hosta). Zmiana, aby127.0.0.1
to naprawić.Dla mnie problem polegał na tym, że nie korzystałem z serwera mysql. Najpierw uruchom serwer, a następnie wykonaj
mysql
.źródło
Widziałem to w moim sklepie, kiedy moi deweloperzy mają zainstalowany menedżer stosu, taki jak MAMP, który jest wstępnie skonfigurowany z MySQL zainstalowanym w niestandardowym miejscu.
na twoim terminalu run
to da ci ścieżkę do pliku skarpety. wybierz tę ścieżkę i użyj jej w parametrze DATABASES HOST.
Musisz tylko wskazać
UWAGA
uruchom również,
which mysql_config
jeśli w jakiś sposób masz wiele instancji serwera mysql zainstalowanych na komputerze, możesz łączyć się z niewłaściwym.źródło
Właśnie zmieniłem
HOST
fromlocalhost
na127.0.0.1
i działa dobrze:źródło
settings.py
projekcie.Kiedy, jeśli zgubisz demona mysql w systemie Mac OSx, ale jest on obecny w innej ścieżce, na przykład w prywatnym / var, wykonaj następujące polecenie
1)
2) zrestartuj połączenie z mysql za pomocą:
działa również dla mariadb
źródło
Uruchom poniższy cmd w terminalu
Następnie uruchom ponownie urządzenie, aby odniosło skutek. To działa!!
źródło
Sprawdź liczbę otwartych plików dla procesu mysql za pomocą polecenia lsof.
Zwiększ limit otwartych plików i uruchom ponownie.
źródło
ulimit
zwiększyć liczbę otwartych plików, które klient i serwer mogą otworzyć. jeśli korzystasz z najnowszej wersji Ubuntu, może to wymagać edycji skryptu startowego mysql w / etc / init, ale miejmy nadzieję, że możesz to zrobić w pliku .cnf.Po wypróbowaniu kilku z tych rozwiązań bez powodzenia, oto co zadziałało:
źródło
Może to być jeden z następujących problemów.
a następnie umieść go w kodzie połączenia bazy danych:
/tmp/mysql.sock jest zwracanym przez grep
2.Nieprawidłowe rozwiązanie portu mysql: Musisz znaleźć prawidłowy port mysql:
a następnie w swoim kodzie:
3306 to port zwrócony przez grep
Myślę, że pierwsza opcja rozwiąże twój problem.
źródło
Dla tych, którzy zaktualizowali z 5.7 do 8.0 przez homebrew, ten błąd jest prawdopodobnie spowodowany tym, że aktualizacja nie została ukończona. W moim przypadku
mysql.server start
dostałem następujący błąd:Następnie sprawdziłem plik dziennika za pośrednictwem
cat /usr/local/var/mysql/YOURS.err | tail -n 50
i znalazłem:Jeśli jesteś na tej samej łodzi, najpierw zainstaluj
[email protected]
przez homebrew, zatrzymaj serwer, a następnie ponownie uruchom system 8.0.Następnie,
Spowoduje to ponowne uruchomienie MySQL (8.0).
źródło
ERROR! The server quit without updating PID file
Znowu to samo .Myślę, że widziałem to samo zachowanie jakiś czas temu, ale nie pamiętam szczegółów.
W naszym przypadku problem polegał na tym, że testrunner inicjuje połączenia z bazą danych w stosunku do pierwszej wymaganej interakcji z bazą danych, na przykład przez import modułu w settings.py lub jakiś __init__.py. Spróbuję znaleźć więcej informacji, ale to może już zadzwonić do Twojej sprawy.
źródło
Upewnij się, że plik / etc / hosts zawiera plik
127.0.0.1 localhost
i powinien działać dobrzeźródło
Mam na ten temat dwa podstępne przypuszczenia
KONJEKTURA 1
Sprawdź, czy nie możesz uzyskać dostępu do
/tmp/mysql.sock
pliku. Kiedy konfiguruję bazy danych MySQL, zwykle pozwalam na umieszczenie witryny z plikiem gniazda/var/lib/mysql
. Jeśli logujesz się do mysql asroot@localhost
, Twoja sesja systemu operacyjnego wymaga dostępu do/tmp
folderu. Upewnij się, że/tmp
masz odpowiednie prawa dostępu w systemie operacyjnym. Upewnij się również, że użytkownik sudo zawsze może wczytać plik/tmp
.KONJEKTURA 2
Dostęp do mysql przez
127.0.0.1
może spowodować pewne zamieszanie, jeśli nie zwracasz na to uwagi. W jaki sposób?Z wiersza poleceń, jeśli łączysz się z MySQL za pomocą
127.0.0.1
, może być konieczne określenie protokołu TCP / IP.lub wypróbuj nazwę DNS
Pominie to logowanie jako
root@localhost
, ale upewnij się, żeroot@'127.0.0.1'
zdefiniowałeś.Następnym razem, gdy łączysz się z MySQL, uruchom to:
Co ci to daje?
Jeśli te funkcje zwracają te same wartości, łączysz się i uwierzytelniasz zgodnie z oczekiwaniami. Jeśli wartości są różne, może być konieczne utworzenie odpowiedniego użytkownika
[email protected]
.źródło
Miałem ten sam problem. Okazało się,
mysqld
że przestał działać (jestem na Mac OSX). Zrestartowałem go i błąd zniknął.Doszedłem do wniosku, że
mysqld
nie działa głównie z powodu tego linku: http://dev.mysql.com/doc/refman/5.6/en/can-not-connect-to-server.htmlZwróć uwagę na pierwszą wskazówkę!
źródło
jeśli pojawi się błąd jak poniżej:
Następnie znajdź lokalizację swojego pliku mysqld.sock i dodaj go do „HOSTA”.
Tak jak używam Xampp w systemie Linux, więc mój
mysqld.sock
plik znajduje się w innej lokalizacji. więc to nie działa dla '/var/run/mysqld/mysqld.sock
'źródło
Sprawdź, czy Twój mysql nie osiągnął maksymalnej liczby połączeń lub nie znajduje się w jakiejś pętli rozruchowej, co zdarza się dość często, jeśli ustawienia w my.cnf są nieprawidłowe.
Użyj ps aux | grep mysql, aby sprawdzić, czy PID się zmienia.
źródło
Zbyt długo rozglądałem się w Internecie, aby nie udzielać odpowiedzi. Po próbie wpisania znaku zachęty mysql z wiersza poleceń nadal otrzymywałem tę wiadomość:
BŁĄD 2002 (HY000): Nie można połączyć się z lokalnym serwerem MySQL przez gniazdo '/tmp/mysql.sock' (2)
Wynikało to z faktu, że mój lokalny serwer mysql już nie działał. Aby zrestartować serwer, przeszedłem do
gdzie znajdował się mój mysql.server. Stąd po prostu wpisz:
Spowoduje to ponowne uruchomienie lokalnego serwera mysql.
W razie potrzeby możesz zresetować hasło roota.
źródło
Musiałem zabić wszystkie wystąpienia mysql, najpierw znajdując wszystkie identyfikatory procesów:
A potem ich zabijając:
Następnie:
Pracował dla mnie.
źródło
Gniazdo znajduje się w / tmp. W systemie Unix, ze względu na tryby i prawa własności do / tmp, może to spowodować pewien problem. Ale jeśli powiesz nam, że MOŻESZ normalnie używać połączenia mysql, myślę, że nie jest to problem w Twoim systemie. Podstawowym sprawdzeniem powinno być przeniesienie mysql.sock do bardziej neutralnego katalogu.
Fakt, że problem występuje „losowo” (lub nie za każdym razem), pozwala mi pomyśleć, że może to być problem z serwerem.
Czy twój / tmp znajduje się na standardowym dysku, czy na egzotycznym montażu (jak w pamięci RAM)?
Czy twój / tmp jest pusty?
Czy
iotop
pokazuje ci coś nie tak, gdy napotkasz problem?źródło
Skonfiguruj połączenie DB w oknie dialogowym „Zarządzanie połączeniami DB”. Wybierz opcję „Standard (TCP / IP)” jako metodę połączenia.
Zobacz tę stronę, aby uzyskać więcej informacji http://dev.mysql.com/doc/workbench/en/wb-manage-db-connections.html
Zgodnie z tą inną stroną plik gniazda jest używany, nawet jeśli określono localhost.
Pokazuje również, jak sprawdzić na serwerze, uruchamiając następujące polecenia:
źródło
w systemie ubuntu14.04 możesz to zrobić, aby rozwiązać ten problem.
źródło
Dla mnie jestem pewien, że mysqld jest uruchomiony, a mysql z linii poleceń może działać poprawnie. Ale serwer httpd pokazuje problem (nie może połączyć się z mysql przez gniazdo).
Uruchomiłem usługę z mysqld_safe &.
w końcu odkryłem, że kiedy uruchamiam usługę mysqld z usługą mysqld start, są problemy (problem z uprawnieniami selinux), a kiedy naprawiam problem z selinux i uruchamiam mysqld z „service mysqld start”, problem z połączeniem httpd znika. Ale kiedy uruchamiam mysqld z mysqld_safe &, mysqld może działać. (klient mysql może działać poprawnie). Ale nadal występuje problem podczas łączenia się z httpd.
źródło
Jeśli jest to związane z gniazdem, przeczytaj ten plik
i zobacz, jaka jest standardowa lokalizacja gniazda. To taka linia:
teraz utwórz alias dla swojej powłoki, taki jak:
W ten sposób nie potrzebujesz uprawnień roota.
źródło
Po prostu spróbuj biec
mysqld
.To właśnie nie działało dla mnie na Macu. Jeśli to nie zadziała, przejdź do,
/usr/local/var/mysql/<your_name>.err
aby wyświetlić szczegółowe dzienniki błędów.źródło
Może być pomocna.
źródło
Używając MacOS Mojave 10.14.6 dla MySQL 8.0.19 zainstalowanego przez Homebrew
sudo find / -name my.cnf
/usr/local/etc/my.cnf
Pracowałem przez jakiś czas, po czym w końcu błąd powrócił. Odinstalowałem wersję MySQL Homebrew i zainstalowałem plik .dmg bezpośrednio z tego miejsca
Od tamtej pory szczęśliwie się łączę.
źródło
W moim przypadku pomogła edycja pliku
/etc/mysql/mysql.conf.d/mysqld.cnf
i zamiana linii:z
Następnie zrestartowałem serwer i działało dobrze. Zabawne jest to, że jeśli przywrócę linię tak, jak była wcześniej i ponownie uruchomię, nadal działała.
źródło
Niedawno miałem podobny problem. Przeszedłem przez wiele odpowiedzi. Mam to działające, wykonując następujące kroki.
źródło
U mnie serwer mysql nie działał. Tak więc uruchomiłem serwer mysql za pośrednictwem
następnie
mysql_secure_installation
aby zabezpieczyć serwer, a teraz mogę odwiedzić serwer MySQL za pośrednictwem
sudo mysql -uroot -p
źródło