在升级到 Ubuntu 20.04 LTS 后,MySQL 的 apt 源也更新到 MySQL 8 的版本。新的版本采用了不同的身份验证和链接方式,导致只能在 root 的 shell 中登录 MySQL。而不能使用 SSH 隧道进行远程管理。
这并非是由禁止了远程主机连接导致的,因为在 SSH 隧道建立后,管理客户端的 localhost
或 127.0.0.1
就相当于服务器本机了。经查明,这是因为 MySQL 8 默认禁用了 TCP/IP 连接的 root 登录,只能使用 UNIX Socket 文件描述符登录导致的。
进行 MySQL 的初始安全配置
根据 MySQL 的官方建议,在安装完 MySQL 后,应执行 mysql_secure_installation
命令。然后,根据需要进行配置。建议在生产环境禁止匿名登录、删除测试数据库等。
1 | mysql_secure_installation |
修改 root 用户的登录验证插件以允许其使用 TCP/IP 协议登录
首先,以 root 用户的身份进入 MySQL 命令行。由于默认启用的 UNIX Socket 协议,我们无需知道 root 用户的密码即可登录。
1 | sudo mysql |
然后,查看 user
表的内容:
1 | use mysql; |
我们会发现 root 用户的 plugin
字段是 auth_socket
,也就是使用本地 UNIX Socket 进行认证。如果不需要,可以直接卸载这个认证方式的插件。
1 | UNINSTALL PLUGIN auth_socket; |
由于验证插件改变,其密码 hash 方式也会随之变化,因此我们要重设 root 密码。请将下面的 <password>
替换为你要重新设置的 root 密码:
1 | ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '你的密码'; |
最后,重启 MySQL 服务,即可使用 TCP/IP 协议登录了。
1 | sudo service mysql restart |