MySQL nie działa na: mysql „ERROR 1524 (HY000): Wtyczka 'auth_socket' nie jest załadowana”

128

Moje lokalne środowisko to:

  • świeży Ubuntu 16.04
  • z PHP 7
  • z zainstalowanym MySQL 5.7

    sudo apt-get install mysql-common mysql-server

Kiedy próbowałem zalogować się do MySQL (przez CLI):

mysql -u root -p

Natknąłem się na cykliczny problem z 3 krokami.

1) Najpierw był problem z gniazdem

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'

Rozwiązanie: ponowne uruchomienie komputera.

Co doprowadziło do kolejnego błędu:

2) W przypadku odmowy dostępu

ERROR 1698 (28000): Access denied for user 'root'@'localhost'.

Możliwy problem? Błędne hasło dla użytkownika „root”!

Rozwiązanie: zresetuj hasło roota za pomocą tego samouczka .

Przy poprawnym haśle i działającym gnieździe pojawia się ostatni błąd.

3) Nieprawidłowa wtyczka uwierzytelniająca

mysql "ERROR 1524 (HY000): Plugin 'unix_socket' is not loaded"

Tutaj zatrzymałem się lub jakoś dotarłem do 1) ponownie.

Tomáš Votruba
źródło
1
Cieszę się, że działa dobrze :) dzięki za kontakt!
Tomáš Votruba

Odpowiedzi:

376

Mam rozwiązanie!

Podczas resetowania hasła roota w kroku 2), zmień również wtyczkę autoryzacji na mysql_native_password:

use mysql;
update user set authentication_string=PASSWORD("") where User='root';
update user set plugin="mysql_native_password" where User='root';  # THIS LINE

flush privileges;
quit;

To pozwoliło mi się pomyślnie zalogować!


Pełne rozwiązanie kodu

1. uruchom polecenia bash

1. najpierw uruchom te polecenia bash

sudo /etc/init.d/mysql stop # stop mysql service
sudo mysqld_safe --skip-grant-tables & # start mysql without password
# enter -> go
mysql -uroot # connect to mysql

2. następnie uruchom polecenia mysql => skopiuj i wklej to ręcznie do cli

use mysql; # use mysql table
update user set authentication_string=PASSWORD("") where User='root'; # update password to nothing
update user set plugin="mysql_native_password" where User='root'; # set password resolving to default mechanism for root user

flush privileges;
quit;

3. uruchom więcej poleceń basha

sudo /etc/init.d/mysql stop 
sudo /etc/init.d/mysql start # reset mysql
# try login to database, just press enter at password prompt because your password is now blank
mysql -u root -p 

4. Problem z gniazdem (z twoich komentarzy)

Gdy zobaczysz błąd gniazda , społeczność zaproponowała 2 możliwe rozwiązania:

sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld
sudo mysqld_safe --skip-grant-tables &

(dzięki @Cerin)

Lub

mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqld  

(dzięki @Peter Dvukhrechensky)


Ślepe ścieżki i możliwe błędy krawędzi

Użyj 127.0.0.1 zamiast localhost

mysql -uroot # "-hlocalhost" is default

Może prowadzić do „brakującego pliku” lub błędu slt.

mysql -uroot -h127.0.0.1

Działa lepiej.

Pomiń problem z gniazdem

Znalazłem wiele sposobów tworzenia mysqld.sockpliku, zmiany praw dostępu lub dowiązania symbolicznego. W końcu to nie był problem.

Pomiń my.cnfplik

Problemu też tam nie było. Jeśli nie jesteś pewien, może ci to pomóc .

Tomáš Votruba
źródło
3
Dziękuję Ci za to. Jest to również doskonała odpowiedź na pytanie, jak zresetować przepustkę główną mysql, więc możesz nieco zmodyfikować tytuł, aby pomóc w jego pojawieniu się, zanim już napotkamy problem z gniazdem.
Wtower
1
Cieszę się, że pomogło. Jak edytować tytuł, aby zachować wiadomość źródłową? Rozumiem, że rozwiązanie wymaga zresetowania hasła, ale nie rozwiązuje problemu w tytule. Jest to bardziej złożona awaria większej liczby punktów. Aby zresetować hasło roota, udałbym się tutaj: stackoverflow.com/a/6401963/1348344
Tomáš Votruba
1
@matanster Niezupełnie, jest to czysta konstrukcja typu próba-niepowodzenie krok po kroku. Z jakiego systemu operacyjnego korzystasz?
Tomáš Votruba
8
Twoje wywołanie mysqld_safe jest nieprawidłowe. Zamiast tego musisz biegać:sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld; sudo mysqld_safe --skip-grant-tables &
Cerin
3
Proszę dodać do odpowiedzi możliwe rozwiązanie problemu z gniazdem. Jak ten mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqldTo może zaoszczędzić komuś czas
Peter Dvukhrechensky
41

Możesz spróbować w następujący sposób, to działa dla mnie.

Uruchom serwer:

sudo service mysql start

Teraz przejdź do folderu skarpet:

cd /var/run

Utwórz kopię zapasową skarpety:

sudo cp -rp ./mysqld ./mysqld.bak

Zatrzymaj serwer:

sudo service mysql stop

Przywróć skarpetę:

sudo mv ./mysqld.bak ./mysqld

Uruchom mysqld_safe:

 sudo mysqld_safe --skip-grant-tables --skip-networking &

Uruchom powłokę mysql:

 mysql -u root

Zmień hasło:

Dlatego najpierw wybierz bazę danych

mysql> use mysql;

Teraz wprowadź poniżej dwa zapytania:

mysql> update user set authentication_string=password('123456') where user='root';
mysql> update user set plugin="mysql_native_password" where User='root'; 

Teraz wszystko będzie dobrze.

mysql> flush privileges;
mysql> quit;

Do sprawdzenia:

mysql -u root -p

Gotowe!

N.B, After login please change the password again from phpmyadmin

Teraz sprawdź hostname/phpmyadmin

Username: root

Password: 123456

Aby uzyskać więcej informacji, zobacz Jak zresetować zapomniane hasło phpmyadmin w Ubuntu

Bablu Ahmed
źródło
2
tylko to działa dla mnie! gniazdo do tworzenia kopii zapasowych i przywracania jest całkiem sprytne
touhid udoy
1
BŁĄD 1045 (28000): Odmowa dostępu dla użytkownika „root” @ „localhost” (przy użyciu hasła: TAK) przed komunikatem „gotowe!” w odpowiedzi, próbując zalogować się na 123456.
trainoasis
Rozwiązałem, wykonując opisane kroki w phpmyadmin (tj. Zmień hasło, zmień wtyczkę). Z jakiegoś powodu `` set authentication_string = password (...) '' sprawiło, że przestało działać (błąd 1045 (28000): odmowa dostępu ...).
Fil
12

mysqlPoleceń domyślnie używa gniazda UNIX, aby połączyć się z MySQL.

Jeśli używasz MariaDB, musisz załadować wtyczkę Unix Socket Authentication Plugin po stronie serwera.

Możesz to zrobić edytując [mysqld]konfigurację w następujący sposób:

[mysqld]
plugin-load-add = auth_socket.so

W zależności od dystrybucji plik konfiguracyjny zwykle znajduje się pod adresem /etc/mysql/lub/usr/local/etc/mysql/

rustyx
źródło
1
Ten. Wszystkie inne odpowiedzi wyjaśniają, jak obejść błąd. Ten wyjaśnia, jak to rozwiązać.
Envite
Jeśli korzystasz z MariaDB 10.4.3 i nowszych, wtyczka unix_socket auth powinna być zainstalowana domyślnie, ale jeśli nieprawidłowo określisz ją jako plugin = "auth_socket", zamiast plugin = "unix_socket" podczas aktualizacji "user", otrzyma tę nieco mylącą wiadomość. Moja odpowiedź szczegółowo opisuje, jak to schrzaniłem.
Rohn Adams
9

Możesz wypróbować następujące kroki:

Najpierw zatrzymaj usługę MySQL sudo /etc/init.d/mysql stop

Zaloguj się jako root bez hasła sudo mysqld_safe --skip-grant-tables &

Po zalogowaniu terminal mysql powinieneś potrzebować więcej poleceń:

use mysql;

UPDATE mysql.user SET authentication_string=PASSWORD('solutionclub3@*^G'), plugin='mysql_native_password' WHERE User='root';

flush privileges;

sudo mysqladmin -u root -p -S /var/run/mysqld/mysqld.sock shutdown

Po ponownym uruchomieniu serwera mysql Jeśli nadal napotykasz błąd, odwiedź: Zresetuj hasło root MySQL 5.7 Ubuntu 16.04

Inderpal Singh
źródło
8

W przypadku Ubuntu 18.04 i mysql 5.7

  • krok 1: sudo mkdir /var/run/mysqld;

    krok 2: sudo chown mysql /var/run/mysqld

    krok 3: sudo mysqld_safe --skip-grant-tables& quit (użyj quit, jeśli się zablokował)

zaloguj się do mysql bez hasła

  • krok 4: sudo mysql --user=root mysql

    krok 5: SELECT user,authentication_string,plugin,host FROM mysql.user;

    krok 6: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'

teraz zaloguj się z

  • mysql -u root -p <root>
arunava maiti
źródło
1
ale na którym etapie mogę ustawić przepustkę dla roota? ponieważ próbowałem, $ mysql -u root -pale odmowa dostępu. Access denied for user 'root'@'localhost' (using password: YES)Próbowałem wprowadzić hasło „TAK”
AlexNikonov
4

Wypróbuj: sudo mysql_secure_installation

Praca w Ubuntu 18.04

Gorcer
źródło
1

Na wypadek, gdyby ktoś tu wylądował po popełnieniu tego samego błędu co ja:

  1. Przełączono na plugin="mysql_native_password"tymczasowo. Wykonał moje zadania.
  2. Podjęto próbę przełączenia z powrotem na wtyczkę „auth_socket”, ale odwoływałem się do niej nieprawidłowo, plugin="auth_socket"co spowodowałomysql "ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded"
  3. Nie mając możliwości zalogowania się, aby naprawić ten błąd, byłem zmuszony zatrzymać mysql i użyć mysql_safedo ominięcia uwierzytelniania, aby przełączyć się na odpowiednią wtyczkęplugin="unix_socket"

Miejmy nadzieję, że zaoszczędzi to komuś trochę czasu, jeśli otrzyma komunikat o błędzie oryginalnego postera, ale prawdziwą przyczyną było niepoprawne imię wtyczki, a nie brak w rzeczywistości samej wtyczki „auth_socket”, która zgodnie z dokumentacją MariaDB :

W MariaDB 10.4.3 i nowszych wtyczka uwierzytelniająca unix_socket jest instalowana domyślnie i jest używana przez konto użytkownika „root” @ „localhost”.

Rohn Adams
źródło
-7

Możesz spróbować za pomocą poniższych poleceń:

hduser@master:~$ sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.
hduser@master:~$ sudo /etc/init.d/mysql start
[ ok ] Starting mysql (via systemctl): mysql.service.
genghenggao
źródło
Czy możesz to dalej wyjaśnić? W jaki sposób ponowne uruchomienie serwera rozwiązuje podany komunikat o błędzie?
Nico Haase