Ubuntu 15.10 mysql error 1524 - unix_socket

51

В Ubuntu 15.10 в определенный момент (возможно, после установки и удаления mariadb) mysql не смог работать. Задачи не работают, но сервер не работает.

По команде:

mysql -u root -p

система отвечает как:

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

Нет возможности войти, плагин не найден, нет ошибок в конфигурационных файлах (все по умолчанию).

Как вернуть контроль и заставить работать сервер MySQL?

Гидра Стармастер
источник
Я не знаком с этой конкретной ошибкой, но вижу это обсуждение: lists.launchpad.net/maria-developers/msg08177.html
Jos
@Jos: эта дискуссия, возможно, для аналогичной ситуации, не предлагает решения. Я много гуглил, но не нашел готового решения. Во всяком случае, я отправил рабочий ответ.
Гидра Звездный Мастер
О причине сообщения об ошибке: Плагин unix_socket является частью MariaDB (не MySQL) и должен быть загружен для того, чтобы гранты использовали его для работы: mariadb.com/kb/en/library/authentication-plugin-unix-socket
JonnyJD

Ответы:

94

«Unix_socket» был вызван процессом аутентификации mysql (возможно, связан с частичной миграцией базы данных в mariadb, теперь удалена). Чтобы все снова заработало, зайдите:

sudo su

затем следуйте:

/etc/init.d/mysql stop
mysqld_safe --skip-grant-tables &
mysql -uroot

Это полностью остановит mysql, обойдёт аутентификацию пользователя (пароль не требуется) и подключится к mysql с пользователем root.

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

use mysql;

Чтобы изменить пароль root на mynewpassword (измените его по своему желанию), просто чтобы быть уверенным в этом:

update user set password=PASSWORD("mynewpassword") where User='root';

И этот перезапишет метод аутентификации, удалит запрос unix_socket (и все остальное), восстановив нормальный и рабочий метод пароля:

update user set plugin="mysql_native_password";

Выход из консоли mysql:

quit;

Остановитесь и начните все, что связано с MySQL:

/etc/init.d/mysql stop
kill -9 $(pgrep mysql)
/etc/init.d/mysql start

Не забудьте в exitрежиме su.

Теперь сервер MySQL запущен и работает. Вы можете войти в систему как root:

mysql -u root -p

или что угодно. Использование пароля действует.

Вот и все.

Гидра Стармастер
источник
Мой mysqld_safeне имеет выбора, как --skip-grant-tables.. что дает?
Heemayl
Я нахожусь на mysqld 5.6.27-0ubuntu1. Вы должны найти этот вариант, глядя на:mysqld --verbose --help
Hydra Starmaster
2
Это заставило меня идти. С некоторыми отличиями, вместо mysqld_safeкоторых жаловался, аргумент --skip-grant-tables не существовал, который я использовал mysqld. Однако он продолжал жаловаться, что не может создать файлы сокетов в /var/run/mysqld/. Я проверил конфигурацию apparmor, и у нее были соответствующие разрешения. Чтобы исправить это , я должен был , mkdir /var/run/mysqld/а затем дать полностью открытые разрешения: chmod -R 777 /var/run/mysqld/. Затем я мог бы наконец запустить демон и изменить плагин на «mysql_native_password».
dennmat
1
Моя таблица пользователей не имеет поля пароля (Ubuntu 16 mysql 5.7.13). Я использовал этот SQL: UPDATE mysql.user SET authentication_string = PASSWORD ('foobar123'), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';
Энтони Скайф,
Инструкция здесь лаконична и помогла мне решить проблему. Спасибо!
Эдуардо Б.
11

Вот мои шаги сделать это:

/etc/init.d/mysql stop
sudo killall mysqld_safe
sudo killall mysqld
sudo mysqld_safe --skip-grant-tables &
mysql -u root
use mysql;
update user set password=PASSWORD("mynewpassword") where User='root';
update user set plugin="mysql_native_password";
quit;
/etc/init.d/mysql stop
sudo kill -9 $(pgrep mysql)
/etc/init.d/mysql start
Рой Ян
источник
1
Теперь после «mysql -u root» я получаю: ОШИБКА 1524 (HY000): Плагин «root» не загружен
dxvargas
Похоже, вы перепутали два запроса ОБНОВЛЕНИЕ. Вы установили плагин = "корень" случайно?
Адам Плохер