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ą?
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ą?
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.
/etc/hosts
plik 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.
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
service mariadb start
ponieważ mariadb.org/debian-9-released-mariadb-mysql-variant
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
Serwer MySQL nie działa lub nie jest to lokalizacja jego pliku gniazda (sprawdź my.cnf).
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:
su mysql
ln -s /data/mysql_datadir/mysql.sock /var/lib/mysql/mysql.sock
To rozwiązało mój problem
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
mariadb-server
i mariadb
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ł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.
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;
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ę 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
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)
Rozważ użycie
expire_logs_days = 10
max_binlog_size = 100M
Pomoże to ograniczyć zużycie dysku.
innodb_buffer_pool_size
w my.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:
ln -s /var/lib/mysql/mysql.sock /tmp/mysql.sock
service mysqld restart
Sprawdź, czy działa inna usługa mysql.
Upewnij się, że uruchomiłeś serwer:
mysql.server start
Następnie połącz się z użytkownikiem root:
mysql -uroot
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 !!
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 / *
Najpierw wpisz „service mysqld start” i zaloguj się
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
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.
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 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 ~ $
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!
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
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!
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.
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.