MySQL 拒绝与 auth_socket 的连接

MySQL 拒绝与 auth_socket 的连接

我最近用 MySQL Community Edition 5.7 替换了 CentOS 7 服务器上的 MariaDB 安装。之前的安装配置为允许 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

然后我使用自动生成的临时 root 密码连接到 MySQL 并设置用户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)

我也无法使用更新用户之前有效的临时密码登录。

我是否可能遗漏了一些细微的配置步骤?

答案1

假设您在更改 cnf 文件后重新启动了服务器,您可以尝试添加第二行,.cnf以便在插件未成功初始化时服务器失败:

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

这样你也许能够缩小问题范围。或者你可以尝试在运行时从 mysql 中注册插件:

INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';

答案2

我无法评论以上答案,因此这里是我的“自己的”答案:

INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';

不起作用,至少在 CentOS 7 上的 MariaDB (5.5) 中不起作用。对于 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 备份)

相关内容