遇到这个BUG,修复过程备忘一下:
正常情况下,在 Ubuntu 中安装 MySQL 数据库是非常简单的事:
$sudo apt update
$sudo apt install mysql-server
在 MySQL 安装成功之后,应该通过其附带的安全脚本:
mysql_secure_installation
修改默认的安全设置,如更新 root 密码、禁止匿名访问等。
但从2022年7月开始,在 Ubuntu 中直接运行此脚本的话,会在要求用户输入密码后,返回以下错误:
... Failed! Error:
SET PASSWORD has no significance for user 'root'@'localhost' as
the authentication method used doesn't store authentication data
in the MySQL server. Please consider using ALTER USER instead
if you want to change authentication parameters.
原因是这个脚本尝试为 MySQL 的 root 账号设置密码,但在 Ubuntu 默认安装的 MySQL 中,root 账号没有被配置成使用密码进行验证。从而导致安全引导脚本陷入死循环,用户只能通过关闭SSH终端连接来中止脚本。
修复的方式如下:
重新 SSH 登录,连接 MySQL,修改 root 账号的验证方式:
$sudo mysql
mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YOUR-PASSWORD';
mysql > exit
此时,可以正常的运行安全脚本了:
mysql_secure_installation
引导设置结束后,再以 root 账号登录 MySQL 改回默认的验证方式,并查看 MySQL 服务的状态:
$mysql -u root -p
mysql > ALTER USER 'root'@'localhost' IDENTIFIED WITH auth_socket;
mysql > exit
$systemctl restart mysql.service
$systemctl status mysql.service
● mysql.service - MySQL Community Server
Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2022-08-18 13:26:55 UTC; 6min ago
Main PID: 10288 (mysqld)
Status: "Server is operational"
Tasks: 39 (limit: 1137)
Memory: 370.0M
CGroup: /system.slice/mysql.service
└─10288 /usr/sbin/mysqld
至此,意味着 MySQL 服务已经正常运行了。