MySQL не вдається: mysql "ПОМИЛКА 1524 (HY000): плагін" auth_socket "не завантажений"


126

Моє місцеве середовище:

  • свіжий 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) Неправильний плагін auth

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

Тут я зупинився або якось потрапив до 1) знову.


1
Радий, що це добре працює для вас :) Дякую за те, що дісталися!
Томаш Вотруба

Відповіді:


371

Я отримав рішення!

Під час скидання пароля 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. Випуск розетки (з ваших коментарів)

Коли ви бачите помилку сокета , спільнота отримала 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
Томаш VOTRUBA

1
@matanster Насправді, це чиста поетапна побудова пробної помилки. Яку ОС ви використовуєте?
Томаш Вотруба

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Це може врятувати чийсь час
Петро Двухреченський

41

Ви можете спробувати, як це працює для мене.

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

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 &

Оболонка Init 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
тільки це працює для мене! резервне копіювання та відновлення сокета досить розумне
touhid udoy

1
ПОМИЛКА 1045 (28000): Відмовлено в доступі для користувача 'root' @ 'localhost' (з використанням пароля: ТАК) до "зроблено!" рядок у вашій відповіді при спробі увійти з 123456.
trainoasis

Я вирішив виконати описані кроки в phpmyadmin (тобто змінити пароль, змінити плагін). Чомусь "встановити автентифікацію_string = пароль (...)" змусив його перестати працювати (помилка 1045 (28000): доступ заборонено ...).
Філ

12

mysqlКоманда за замовчуванням використовує UNIX сокети для підключення до MySQL.

Якщо ви використовуєте MariaDB, вам потрібно завантажити плагін для аутентифікації Unix Socket на стороні сервера.

Це можна зробити, відредагувавши [mysqld]конфігурацію так:

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

Залежно від розповсюдження, конфігураційний файл, як правило, розташований у /etc/mysql/або/usr/local/etc/mysql/


1
Ось цей. Усі інші відповіді пояснюють, як обійти помилку. Цей пояснює, як її вирішити.
Запросіть

Якщо ви перебуваєте на MariaDB 10.4.3 та пізніших версіях, плагін unix_socket auth повинен бути встановлений за замовчуванням, але якщо ви неправильно посилаєтесь на нього як plugin = "auth_socket", замість plugin = "unix_socket" під час оновлення свого "користувача", ви отримає це дещо оманливе повідомлення. Моя відповідь пояснює, як я зіпсував це.
Рон Адамс

9

Ви можете спробувати такі кілька кроків:

Зупиніть службу Mysql 1-ю sudo /etc/init.d/mysql stop

Увійдіть як корінь без пароля 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 Якщо ви все-таки зіткнулися з помилкою, вам потрібно відвідати: Скинути MySQL 5.7 root root 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


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.

Чи можете ви пояснити це далі? Як перезапуск сервера вирішує подане повідомлення про помилку?
Ніко Хааз
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.