生命在于编程

生命不息,编程不止

0%

重置MySQL或MariaDB根密码

如何在Ubuntu 20.04上重置MySQL或MariaDB根密码

原文:https://www.digitalocean.com/community/tutorials/how-to-reset-your-mysql-or-mariadb-root-password-on-ubuntu-20-04

编者按:遇到这个问题后,试了很多种方法,这篇文章介绍的最为详细也最为全面,按照这个方法可以完美解决。

下面内容基本上是谷歌翻译过来。

介绍

忘记数据库密码了吗?它发生在我们最好的人身上。如果您忘记或丢失了MySQL或MariaDB数据库的root密码,但如果您有权访问服务器和具有sudo特权的用户帐户,则仍然可以访问并重置密码。

本教程演示了如何为在Ubuntu 20.04上通过软件包管理器安装的MySQL和MariaDB数据库重置密码apt。根密码的更改过程会有所不同,具体取决于您是否安装了MySQL或MariaDB以及发行版或其他供应商提供的软件包附带的默认systemd配置。尽管本教程中的说明可能适用于其他系统或数据库服务器版本,但它们已通过Ubuntu 20.04和发行版提供的软件包进行了测试。

注意:在全新的Ubuntu 20.04安装中,默认的MySQL或MariaDB配置通常允许您访问数据库(具有完整的管理特权),而无需提供密码,只要您从系统的帐户进行连接即可。在这种情况下,可能不必重置密码。在继续重置数据库密码之前,请尝试使用sudo mysql命令访问数据库。仅当更改了身份验证的默认配置,并且这导致访问被拒绝错误时,请按照本教程中的步骤进行操作。

先决条件

要恢复您的MySQL或MariaDB密码,您将需要:

注意:两种数据库安装指南都保留了数据库帐户的默认配置,只要您可以访问系统的帐户,就不需要密码来进行身份验证。您仍然可以按照本指南设置和验证新密码。

步骤1 —识别数据库版本并停止服务器

Ubuntu 20.04可运行MySQL或MariaDB(一种流行的直接替代产品,与MySQL完全兼容)。您将需要使用不同的命令来恢复root密码,具体取决于已安装的命令,因此请按照本节中的步骤确定正在运行的数据库服务器。

使用以下命令检查您的版本:

1
mysql --version

如果您正在运行MariaDB,则会在输出中看到“ MariaDB”和版本号:

MariaDB output

1
mysql  Ver 15.1 Distrib 10.3.25-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

如果您正在运行MySQL,则将看到以下输出:

MySQL out

1
putmysql  Ver 8.0.22-0ubuntu0.20.04.3 for Linux on x86_64 ((Ubuntu))

请注意您正在运行的数据库。这将确定在本教程其余部分中要遵循的适当命令。

为了更改root密码,您需要关闭数据库服务器。如果您正在运行MariaDB,则可以使用以下命令进行操作:

1
sudo systemctl stop mariadb

对于MySQL,请通过运行以下命令关闭数据库服务器:

1
sudo systemctl stop mysql

在数据库停止的情况下,您可以在安全模式下重新启动它以重置root密码。

步骤2 —在没有权限检查的情况下重新启动数据库服务器

在没有权限检查的情况下运行MySQL和MariaDB允许使用root特权访问数据库命令行,而无需提供有效密码。为此,您需要停止数据库加载存储用户特权信息的授权表。由于这有一定的安全隐患,因此您可能还希望禁用网络连接,以防止其他客户端连接到临时易受攻击的服务器。

根据所安装的数据库服务器的不同,在不加载授权表的情况下启动服务器的方式也有所不同。

配置MariaDB在没有授权表的情况下启动

为了在没有授权表的情况下启动MariaDB服务器,我们将使用systemd单元文件为MariaDB服务器守护程序设置其他参数。

执行以下命令,该命令设置启动时MariaDB使用的MYSQLD_OPTS环境变量。在--skip-grant-tables--skip-networking选项告诉MariaDB的启动而不加载授权表或网络功能:

1
sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables --skip-networking"

然后启动MariaDB服务器:

1
sudo systemctl start mariadb

该命令不会产生任何输出,但是会考虑到新的环境变量设置来重新启动数据库服务器。

您可以确保以开头sudo systemctl status mariadb

现在,你应该能够连接到数据库作为MariaDB的用户不提供密码:

1
sudo mysql -u root

您将立即看到数据库外壳提示:

1
MariaDB [(none)]>

现在,您可以访问数据库服务器了,您可以更改root密码,如步骤3所示。

配置MySQL以在没有授权表的情况下启动

为了在没有授权表的情况下启动MySQL服务器,您将更改MySQL的systemd配置,以便在启动时将其他命令行参数传递给服务器。

为此,请执行以下命令:

1
sudo systemctl edit mysql

此命令将在nano编辑器中打开一个新文件,您将用它来编辑MySQL的服务覆盖。这些更改了MySQL的默认服务参数。

该文件将为空。添加以下内容:

MySQL服务覆盖

1
2
3
[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --skip-grant-tables --skip-networking

第一条ExecStart语句清除默认值,而第二条语句提供systemd新的启动命令,包括用于禁用加载授权表和联网功能的参数。

CTRL-x退出文件,然后Y保存所做的更改,然后ENTER确认文件名。

重新加载systemd配置以应用以下更改:

1
sudo systemctl daemon-reload

现在启动MySQL服务器:

1
sudo systemctl start mysql

该命令将不显示任何输出,但是数据库服务器将启动。授权表和联网将不会启用。

以root用户身份连接到数据库:

1
sudo mysql -u root

您将立即看到数据库外壳提示:

1
mysql>

现在您可以访问服务器了,您可以更改root密码了。

步骤3 —更改根密码

数据库服务器现在在受限模式下运行;授权表未加载,并且未启用任何网络支持。这使您可以在不提供密码的情况下访问服务器,但是它禁止您执行更改数据的命令。要重置密码,必须先获得对服务器的访问权限,然后才能加载授权表。

发出以下FLUSH PRIVILEGES命令,通知数据库服务器重新加载授权表:

1
FLUSH PRIVILEGES;

现在,您可以更改root密码。您使用的方法取决于您使用的是MariaDB还是MySQL。

更改MariaDB密码

如果您使用的是MariaDB,请执行以下语句来设置root帐户的密码,并确保将其替换new_password为您会记住的强壮的新密码:

1
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';

您将看到以下输出,指示密码已更改:

1
OutputQuery OK, 0 rows affected (0.001 sec)

MariaDB允许使用自定义身份验证机制,因此请执行以下两条语句以确保MariaDB将对您分配给帐户的新密码使用其默认身份验证机制:

1
2
UPDATE mysql.user SET authentication_string = '' WHERE user = 'root';
UPDATE mysql.user SET plugin = '' WHERE user = 'root';

您将看到每个语句的以下输出:

1
OutputQuery OK, 0 rows affected (0.01 sec)

现在,密码已更改。键入exit以退出MariaDB控制台,然后继续执行步骤4以正常模式重新启动数据库服务器。

修改MySQL密码

对于MySQL,执行以下语句以更改root用户的密码,用new_password您会记住的强密码代替。MySQL允许使用自定义身份验证机制,因此以下语句还确保MySQL将使用其默认身份验证机制来使用新密码对用户进行身份验证:

1
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'new_password';

您将看到以下输出,指示密码已成功更改:

1
OutputQuery OK, 0 rows affected (0.01 sec)

现在,密码已更改。输入退出MySQL控制台exit

让我们以正常操作模式重新启动数据库。

第4步-将数据库服务器还原为常规设置

为了以正常模式重新启动数据库服务器,您必须还原所做的更改,以便启用网络并加载授权表。同样,您使用的方法取决于您使用的是MariaDB还是MySQL。

对于MariaDB,取消MYSQLD_OPTS设置先前设置的环境变量:

1
sudo systemctl unset-environment MYSQLD_OPTS

然后,使用systemctl以下命令重新启动服务:

1
sudo systemctl restart mariadb

对于MySQL,删除修改后的systemd配置:

1
sudo systemctl revert mysql

您将看到类似于以下内容的输出:

1
2
OutputRemoved /etc/systemd/system/mysql.service.d/override.conf.
Removed /etc/systemd/system/mysql.service.d.

然后,重新加载systemd配置以应用更改:

1
sudo systemctl daemon-reload

最后,重新启动服务:

1
sudo systemctl restart mysql

复制

现在,数据库已重新启动,并返回到其正常状态。通过以root用户身份使用密码登录来确认新密码是否有效:

1
mysql -u root -p

复制

系统将提示您输入密码。输入新密码,您将可以按预期访问数据库提示。

结论

您已恢复对MySQL或MariaDB服务器的管理访问权限。确保您选择的新密码安全可靠,并将其保存在安全的地方。

有关用户管理,身份验证机制或其他版本的MySQL或MariaDB的数据库密码重置方式的详细信息,请参阅官方的MySQL文档MariaDB文档