Ubuntu安装MySQL设置密码死循环的问题

遇到这个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 服务已经正常运行了。

留下评论

您的电子邮箱地址不会被公开。