我刚刚在 Ubuntu 22.04 上安装了 MySQL 8.0.36,现在我想运行mysql_secure_installation
.
Digital Ocean的指南指出,在 Ubuntu 上,mysql_secure_installation
如果不首先配置 MySQL“root”用户的密码,运行会产生逻辑循环。按照它的指示,我这样做了:
$ sudo mysql
[sudo] password for user:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.36-0ubuntu0.22.04.1 (Ubuntu)
Copyright (c) 2000, 2024, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'crocodile69210';
Query OK, 0 rows affected (0.00 sec)
mysql> exit;
Bye
mysql_secure_installation
这样做之后,我根本无法跑步。当我尝试时,我收到密码错误:
$ sudo mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root:
Error: Access denied for user 'root'@'localhost' (using password: YES)
当我输入之前建立的 MySQL“root”用户密码 ( crocodile69210
) 和操作系统sudo
密码时,就会发生这种情况。如果我根本不输入密码,结果是相同的,除了最后一行是
(using password: NO)
。
我该怎么做才能跑步mysql_secure_installation
?
编辑:看来ALTER USER
上面的语句实际上并没有设置密码。如果我运行$ mysql -u root -p
并复制并粘贴我设置的密码(该密码在终端历史记录中仍然可见),我将无法登录mysql
:
$ mysql -u root -p
Enter password:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
我不确定这是否或如何阐明问题。
编辑2:根据数字海洋指南错误的理论,我卸载了MySQL ( $ sudo apt remove mysql-server
),然后重新安装了它。我没有运行ALTER USER
DO 文章中给出的命令。我仍然无法运行mysql_secure_installation
并收到与第一次尝试期间相同的“访问被拒绝”密码错误。
编辑 3: 更多信息
当我第一次mysql-server
从完全空白的状态安装时,我能够$ sudo mysql
立即使用来访问 MySQL 交互式 shell。我发现在1)mysql-server
使用卸载$ sudo apt remove mysql-server
和2)mysql-server
使用完全清除后$ sudo apt purge mysql-server
,重新安装后我仍然无法使用$ sudo mysql
。我收到“拒绝访问”密码错误。所以,关于第一次安装的一些事情显然仍然存在。弄清楚这是什么可能有助于解决整个问题。
最终编辑:
在 Ubuntu 上,
apt purge
(或apt remove --purge
) 根本不适用于 MySQL。您必须按照此过程从系统中完全卸载 MySQL。我使用密码管理器生成了 MySQL 'root' 用户的密码,但我没有检查该密码。其中有一个反斜杠 (
\
)。使用命令设置密码时ALTER USER
,shell 会将其解释为转义字符并在将其传递到 MySQL 之前将其删除。因此,我的“root”密码实际上并不是我想象的那样。
不要在 MySQL 密码中使用反斜杠
您无法再
root
使用登录方式登录的原因sudo mysql
是已将身份验证方法设置为
root
,mysql_native_password
替换默认的auth_socket
,该方法允许与 MySQL 用户(在本例中为root
)名称相同的系统用户无需提供密码即可登录服务器。幸运的是,基于 Debian 的发行版上的 MySQL 安装附带了一个名为 的相当高权限的用户
debian-sys-maint
,这可以让您摆脱这些情况下的麻烦。首先,登录 MySQL
debian-sys-maint
(运行sudo less /etc/mysql/debian.cnf
以查找debian-sys-maint
密码):然后,作为第一次尝试,再次尝试更改 的
root
密码:(之后就不需要了
FLUSH PRIVILEGES
。)为什么?
因为我尝试
root
使用与您相同的方法更改密码,并且我完全能够登录正在运行的服务器mysql -u root -pcrocodile69210
。您遵循的程序似乎是正确的:很可能是在执行过程中出现了问题。
但不管怎样,为了运行
mysql_secure_installation
,如果再次设置密码不起作用,很可能你可以设置root
返回的身份验证方式auth_socket
,然后运行即可sudo mysql_secure_installation
;您所遵循的指南相当旧,并且它警告您的错误很可能早已得到修复: