如何重置您的MySQL或MariaDB根密码

来自菜鸟教程
跳转至:导航、​搜索

介绍

忘记密码经常发生在我们当中。 如果您忘记或丢失了 MySQL 或 MariaDB 数据库的 root 密码,如果您可以访问服务器和启用 sudo 的用户帐户,您仍然可以访问并重置密码。

本教程将介绍如何为新旧版本的 MySQL 和 MariaDB 重置 root 密码。

先决条件

要恢复您的 MySQL/MariaDB 根密码,您需要:

  • 使用 sudo 用户访问运行 MySQL 或 MariaDB 的 Linux 服务器。

第 1 步 — 识别数据库版本

大多数现代 Linux 发行版都附带 MySQL 或 MariaDB,这是一种与 MySQL 完全兼容的流行替代品。 根据使用的数据库及其版本,您需要使用不同的命令来恢复 root 密码。

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

mysql --version

你会在 MySQL 中看到类似这样的输出:

MySQL outputmysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper

或者像 MariaDB 这样的输出:

MariaDB outputmysql  Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1

记下您正在运行的数据库和版本,因为稍后您将使用它们。 接下来,您需要停止数据库,以便您可以手动访问它。

第 2 步 — 停止数据库服务器

要更改 root 密码,您必须事先关闭数据库服务器。

您可以使用以下方法对 MySQL 执行此操作:

sudo systemctl stop mysql

对于 MariaDB 来说:

sudo systemctl stop mariadb

数据库服务器停止后,您将手动访问它以重置 root 密码。

第 3 步 — 重新启动数据库服务器而不进行权限检查

如果您在不加载有关用户权限的信息的情况下运行 MySQL 和 MariaDB,它将允许您以 root 权限访问数据库命令行,而无需提供密码。 这将允许您在不知情的情况下访问数据库。

为此,您需要停止数据库加载存储用户权限信息的 授权表 。 因为这有点安全风险,您还应该跳过网络以防止其他客户端连接。

在不加载授权表或启用网络的情况下启动数据库:

sudo mysqld_safe --skip-grant-tables --skip-networking &

此命令末尾的 & 号将使此进程在后台运行,因此您可以继续使用终端。

现在您可以以 root 用户身份连接到数据库,该用户不应该要求输入密码。

mysql -u root

您将立即看到一个数据库 shell 提示。

MySQL 提示符

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

MariaDB 提示符

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]>

现在您具有 root 访问权限,您可以更改 root 密码。

第 4 步 — 更改 Root 密码

为现代版本的 MySQL 更改 root 密码的一种简单方法是使用 ALTER USER 命令。 但是,由于未加载授权表,此命令现在不起作用。

让我们通过发出 FLUSH PRIVILEGES 命令告诉数据库服务器重新加载授权表。

FLUSH PRIVILEGES;

现在我们实际上可以更改root密码了。

对于 MySQL 5.7.6 和更新的 以及 MariaDB 10.1.20 和更新的,使用以下命令。

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

对于 MySQL 5.7.5 及更早版本 以及 MariaDB 10.1.20 及更早版本,请使用:

SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');

确保将 new_password 替换为您选择的新密码。

注意:如果ALTER USER命令不起作用,通常表示有更大的问题。 但是,您可以尝试 UPDATE ... SET 来重置 root 密码。

UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';

记住在此之后重新加载授权表。


无论哪种情况,您都应该看到命令已成功执行的确认信息。

OutputQuery OK, 0 rows affected (0.00 sec)

密码已更改,因此您现在可以停止数据库服务器的手动实例并像以前一样重新启动它。

第 5 步 — 正常重启数据库服务器

首先,停止您在步骤 3 中手动启动的数据库服务器实例。 该命令搜索 MySQL 或 MariaDB 进程的 PID 或进程 ID,并发送 SIGTERM 告诉它在执行清理操作后顺利退出。 你可以在这个Linux进程管理教程中了解更多。

对于 MySQL,使用:

sudo kill `cat /var/run/mysqld/mysqld.pid`

对于 MariaDB,使用:

sudo kill `/var/run/mariadb/mariadb.pid`

然后,使用 systemctl 重新启动服务。

对于 MySQL,使用:

sudo systemctl start mysql

对于 MariaDB,使用:

sudo systemctl start mariadb

现在,您可以通过运行来确认新密码已正确应用:

mysql -u root -p

该命令现在应该提示输入新分配的密码。 输入它,您应该可以按预期访问数据库提示。

结论

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