要连接到远程 MySQL 服务器,无论是直接连接还是通过 SSH 隧道,您都不能使用unix_socket
身份验证插件,需要对数据库服务器操作系统上的 unix 套接字文件进行本地访问。
The unix_socket
插件是使用特殊类型的文件(unix 套接字)实现的,它是 *nix 系统中进程间通信(IPC)的一种形式。它允许您的 mysql CLI 客户端与数据库对话,并且需要本地访问套接字文件(即:/tmp/mysql.sock
)。当您连接到套接字时,unix_socket
插件(服务器端)将获取连接到套接字的用户的 uid(即:youruser),并自动对您进行身份验证,无需密码。
可能的解决方案:
如果使用非 root 用户连接到机器 B,则需要创建一个与非 root 操作系统用户帐户名同名的 DB 用户。
GRANT ALL PRIVILEGES ON *.* TO 'youruser'@'localhost' IDENTIFIED VIA unix_socket;
现在,您可以使用您的用户帐户和 mysql CLI 客户端连接到 mysql,只需运行:
youruser:~$ mysql
如果您想使用 root 用户连接到数据库,那么您需要访问 root 帐户或与您的用户关联的 sudo 策略才能运行 mysql 客户端。
youruser:~$ sudo mysql
显然,您可以启用对数据库根帐户的常规身份验证网络访问。这可能会导致安全问题,因此最好将其限制为本地主机:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY 'xxx' WITH GRANT OPTION;
现在,如果您可以验证登录身份,您可以从任何本地操作系统帐户登录:
youruser:~$ mysql -u root -p