Ошибка MySQL: mysql «ОШИБКА 1524 (HY000): плагин auth_socket не загружен»

129

Моя местная среда:

  • свежий Ubuntu 16.04
  • с PHP 7
  • с установленным MySQL 5.7

    sudo apt-get install mysql-common mysql-server

Когда я попытался войти в MySQL (через CLI):

mysql -u root -p

Я столкнулся с циклической проблемой из 3 шагов.

1) Сначала была проблема с сокетом

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

Решение: перезагрузка ПК.

Что привело к еще одной ошибке:

2) С отказом в доступе

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

Возможная проблема? Неверный пароль для пользователя "root"!

Решение: сбросьте пароль root с помощью этого руководства .

При правильном пароле и исправном сокете возникает последняя ошибка.

3) Неправильный плагин авторизации

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

Здесь я остановился или как-то добрался до 1) снова.

Томаш Вотруба
источник
1
Рад, что у вас все получилось :) Спасибо, что обратились к нам!
Tomáš Votruba

Ответы:

379

У меня есть решение!

При сбросе пароля root на шаге 2) также измените плагин аутентификации на 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;

Это позволило мне успешно войти в систему!


Решение полного кода

1. запустите команды bash

1. сначала запустите эти команды 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. затем запустите команды mysql => скопируйте и вставьте это в 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. запустите больше команд bash

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. Проблема с сокетом (из ваших комментариев)

Когда вы видите ошибку сокета , сообщество предложило 2 возможных решения:

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

(спасибо @Cerin)

Или

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

(спасибо @Peter Dvukhrechensky)


Слепые пути и возможные ошибки краев

Используйте 127.0.0.1 вместо localhost

mysql -uroot # "-hlocalhost" is default

Может привести к ошибке «отсутствует файл» или slt.

mysql -uroot -h127.0.0.1

Работает лучше.

Пропустить проблему с сокетом

Я нашел много способов создать mysqld.sockфайл, изменить права доступа или создать символическую ссылку на него. В конце концов, проблема была не в этом.

Пропустить my.cnfфайл

Вопроса тоже не было. Если вы не уверены, это может вам помочь .

Томаш Вотруба
источник
3
Спасибо тебе за это. Это также отличный ответ о том, как сбросить корневой проход mysql, поэтому вы можете немного отредактировать заголовок, чтобы он появился, прежде чем мы уже столкнемся с проблемой сокета.
Wtower
1
Я рад, что это помогло. Как бы вы отредактировали заголовок, чтобы сохранить исходное сообщение? Я понимаю, что решение требует сброса пароля, но оно не решает проблему, указанную в заголовке. Это более сложный отказ большего количества точек. Для сброса пароля root я бы пошел сюда: stackoverflow.com/a/6401963/1348344
Томаш Вотруба,
1
@matanster Не совсем так, это чистая пошаговая попытка сделать ошибку. Какую ОС вы используете?
Tomáš
8
Ваш вызов mysqld_safe неверен. Вместо этого вам нужно запустить:sudo mkdir -p /var/run/mysqld; sudo chown mysql /var/run/mysqld; sudo mysqld_safe --skip-grant-tables &
Cerin
3
Пожалуйста, добавьте к ответу возможное решение проблемы с сокетом. Как этот mkdir -p /var/run/mysqld && chown mysql:mysql /var/run/mysqldЭто может сэкономить чье-то время
Петр Двухреченский
42

Вы можете попробовать следующее: у меня это работает.

Стартовый сервер:

sudo service mysql start

Теперь перейдите в папку с носками:

cd /var/run

Сделайте резервную копию носка:

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

Остановить сервер:

sudo service mysql stop

Восстановим носок:

sudo mv ./mysqld.bak ./mysqld

Запустите mysqld_safe:

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

Запускаем оболочку mysql:

 mysql -u root

Сменить пароль:

Следовательно, сначала выберите базу данных

mysql> use mysql;

Теперь введите ниже два запроса:

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

Теперь все будет хорошо.

mysql> flush privileges;
mysql> quit;

Для проверки:

mysql -u root -p

сделано!

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

Теперь проверьте hostname/phpmyadmin

Username: root

Password: 123456

Для получения дополнительной информации, пожалуйста, проверьте Как сбросить забытый пароль phpmyadmin в Ubuntu

Баблу Ахмед
источник
2
только это работает для меня! сокет для резервного копирования и восстановления довольно умен
тухид удой
1
ОШИБКА 1045 (28000): Отказано в доступе для пользователя 'root' @ 'localhost' (с использованием пароля: ДА) до "готово!" строка в вашем ответе при попытке войти с 123456.
trainoasis
Я решил проделать описанные шаги в phpmyadmin (т.е. сменить пароль, сменить плагин). По какой-то причине 'set authentication_string = password (...)' заставил его перестать работать (Ошибка 1045 (28000): Доступ запрещен ...).
Fil
12

Команда mysqlпо умолчанию использует сокеты UNIX для подключения к MySQL.

Если вы используете MariaDB, вам необходимо загрузить подключаемый модуль Unix Socket Authentication на стороне сервера.

Вы можете сделать это, отредактировав [mysqld]конфигурацию следующим образом:

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

В зависимости от дистрибутива файл конфигурации обычно находится по адресу /etc/mysql/или/usr/local/etc/mysql/

rustyx
источник
1
Вот этот. Все остальные ответы объясняют, как обойти ошибку. Это объясняет, как РАЗРЕШИТЬ это.
Envite
Если вы используете MariaDB 10.4.3 и более поздних версий, плагин unix_socket auth должен быть установлен по умолчанию, но если вы неправильно укажете его как plugin = "auth_socket" вместо plugin = "unix_socket" при обновлении вашего "пользователя", вы получит это несколько вводящее в заблуждение сообщение. В моем ответе подробно описывается, как я все испортил.
Рон Адамс
9

Вы можете попробовать следующие шаги:

Остановить службу Mysql 1st sudo /etc/init.d/mysql stop

Войти как root без пароля sudo mysqld_safe --skip-grant-tables &

После входа в терминал mysql вам необходимо выполнить дополнительные команды:

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

После перезапуска сервера mysql. Если вы все еще сталкиваетесь с ошибкой, вы должны посетить: Сбросить пароль root MySQL 5.7 Ubuntu 16.04

Индерпал Сингх
источник
8

Для Ubuntu 18.04 и mysql 5.7

  • шаг 1: sudo mkdir /var/run/mysqld;

    шаг 2: sudo chown mysql /var/run/mysqld

    шаг 3: sudo mysqld_safe --skip-grant-tables& выйти (используйте quit, если он застрял)

войти в mysql без пароля

  • шаг 4: sudo mysql --user=root mysql

    шаг 5: SELECT user,authentication_string,plugin,host FROM mysql.user;

    шаг 6: ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root'

теперь войдите с помощью

  • mysql -u root -p <root>
арунава маити
источник
1
но на каком этапе я могу установить проход для root? потому что я пробовал, $ mysql -u root -pно в доступе пока нет. Access denied for user 'root'@'localhost' (using password: YES)Я пытался ввести пароль «ДА»
AlexNikonov
4

Попробуйте: sudo mysql_secure_installation

Работа в Ubuntu 18.04

Gorcer
источник
1

Если кто-то приземлится здесь после той же ошибки, что и я:

  1. plugin="mysql_native_password"Временно переключен на . Выполнил свои задачи.
  2. Попытка переключиться обратно на плагин auth_socket, но неверная ссылка на него, plugin="auth_socket"что привело кmysql "ERROR 1524 (HY000): Plugin 'auth_socket' is not loaded"
  3. Не имея возможности войти в систему, чтобы исправить эту ошибку, мне пришлось остановить mysql и использовать его mysql_safeдля обхода аутентификации, чтобы переключиться на соответствующий плагин.plugin="unix_socket"

Надеюсь, это сэкономит кому-то время, если они получат исходное сообщение об ошибке постера, но истинной причиной было неправильное имя плагина, а не отсутствие самого плагина auth_socket, который, согласно документации MariaDB :

В MariaDB 10.4.3 и более поздних версиях плагин аутентификации unix_socket устанавливается по умолчанию и по умолчанию используется учетной записью пользователя 'root' @ 'localhost'.

Рон Адамс
источник
-7

Вы можете попробовать следующие команды:

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
источник
Вы можете объяснить это дальше? Как перезапуск сервера решает данное сообщение об ошибке?
Нико Хаасе