我最近用 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
Run Code Online (Sandbox Code Playgroud)
然后我使用自动生成的临时 root 密码连接到 MySQL 并将root用户设置为使用auth_socket:
ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;
FLUSH PRIVILEGES;
Run Code Online (Sandbox Code Playgroud)
进行此更改后,当我尝试使用 连接到数据库时sudo mysql -u root,出现“访问被拒绝”错误:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
Run Code Online (Sandbox Code Playgroud)
我也无法使用更新用户之前有效的临时密码登录。
是否有一些我可能遗漏的微妙配置步骤?
假设您在更改 cnf 文件后重新启动了服务器,您可以尝试在 中添加第二行,.cnf以便在插件未成功初始化时服务器失败:
plugin-load-add=auth_socket.so
auth_socket=FORCE_PLUS_PERMANENT
Run Code Online (Sandbox Code Playgroud)
这样您就可以缩小问题的范围。或者您可以尝试在运行时从 mysql 中注册插件:
INSTALL PLUGIN auth_socket SONAME 'auth_socket.so';
Run Code Online (Sandbox Code Playgroud)