Назад | Перейти на главную страницу

MySQL отклоняет соединения с auth_socket

Недавно я заменил установку MariaDB на сервере CentOS 7 на MySQL Community Edition 5.7. Предыдущая установка была настроена так, чтобы разрешить одноранговую аутентификацию для пользователя root, и я попытался реплицировать ту же настройку с новой установкой.

После переустановки MySQL и повторной инициализации каталога базы данных (/var/lib/mysql), Я включил auth_socket плагин в /etc/my.cnf:

[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

symbolic-links=0

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

plugin-load-add=auth_socket.so

Затем я подключился к MySQL, используя автоматически созданный временный пароль root, и установил root пользователь для использования auth_socket:

ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;
FLUSH PRIVILEGES;

После внесения этого изменения, когда я пытаюсь подключиться к базе данных с помощью sudo mysql -u root, Я получаю сообщение об ошибке «Доступ запрещен»:

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

Я также не могу войти в систему с временным паролем, который работал до того, как я обновил пользователя.

Есть ли какой-то тонкий шаг настройки, который я мог бы пропустить?

Предполагая, что вы перезапустили сервер после изменений в cnf-файле, вы можете попробовать добавить вторую строку в .cnf так что сервер откажет, если плагин не инициализируется успешно:

plugin-load-add=auth_socket.so
auth_socket=FORCE_PLUS_PERMANENT

Таким образом, вы сможете сузить проблему. Или вы можете попробовать зарегистрировать плагин во время выполнения из mysql:

INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';

Я не могу комментировать ответ выше, поэтому вот мой "собственный" ответ:

INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';

не работает, по крайней мере, с MariaDB (5.5) на CentOS 7. Для Mariadb это должно выглядеть так:

INSTALL PLUGIN unix_socket SONAME 'auth_socket.so'; 

(см. документацию здесь https://mariadb.com/kb/en/library/authentication-plugin-unix-socket/

После этого сделайте

update user set plugin = 'unix_socket' where user='root'; 
FLUSH PRIVILEGES;

перезапустите mariadb и войдите без пароля для пользователя root (например, для резервных копий crontab)