Ошибка MySQL: mysql "ERROR 1524 (HY000): плагин" auth_socket "не загружен"

Моя локальная среда:

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

    sudo apt-get install mysql-common mysql-server
    

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

mysql -u root -p

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

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!

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

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

3) Неверный плагин auth

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

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

Ответ 1

Я получил решение!

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

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

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  

(спасибо @Петру Двухреченскому)


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

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

mysql -uroot # "-hlocalhost" is default

Может привести к "отсутствующему файлу" или ошибке slt.

mysql -uroot -h127.0.0.1

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

Пропустить вопрос сокета

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

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

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

Ответ 2

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

Запустить сервер:

sudo service mysql start

Теперь перейдите в папку sock:

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

сделанный!

NB, After login please change the password again from phpmyadmin

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

Username: root

Password: 123456

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

Ответ 3

Вы можете попробовать эти несколько шагов:

Остановите Mysql Сервис 1-й sudo/etc/init.d/mysql stop

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

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

use mysql;

UPDATE mysql.user SET authentication_string=PASSWORD('[email protected]*^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

Ответ 4

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

Если вы используете MariaDB, вам нужно загрузить плагин Unix Socket Authentication на стороне сервера.

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

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

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

Ответ 5

Для 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 (используйте quit, если он застрял)

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

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

    шаг 5: ВЫБЕРИТЕ пользователя, authentication_string, плагин, хост FROM mysql.user;

    Шаг 6: ИЗМЕНИТЕ ПОЛЬЗОВАТЕЛЯ 'root' @'localhost', ИДЕНТИФИЦИРОВАНО С mysql_native_password BY 'root'

сейчас войдите с

  • mysql -u root -p

Ответ 6

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

Работа в Ubuntu 18.04

Ответ 7

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

[email protected]:~$ sudo /etc/init.d/mysql stop
[ ok ] Stopping mysql (via systemctl): mysql.service.
[email protected]:~$ sudo /etc/init.d/mysql start
[ ok ] Starting mysql (via systemctl): mysql.service.