我最近用 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 备份)