如何重置MySQL或MariaDB root密码

介绍

忘记密码发生在我们最好的。 如果您忘记或丢失root密码到你的MySQL或MariaDB的数据库,你仍然可以访问并重置密码,如果你有访问服务器和sudo -启用用户帐户。 本教程将介绍如何重置MySQL和MariaDB的旧版本和更高版本的root密码。

先决条件

要恢复您的MySQL / MariaDB root 密码,您需要:
  • 使用sudo用户访问运行MySQL或MariaDB的Linux服务器。

第1步 - 识别数据库版本

大多数现代Linux发行版随MySQL或MariaDB,一个流行的替代,完全兼容MySQL。根据所使用的数据库及其版本,您需要使用不同的命令来恢复root密码。 您可以使用以下命令检查您的版本:
mysql --version
你会看到一些输出像这样与MySQL:
mysql  Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using  EditLine wrapper
或者输出这样的MariaDB:
mysql  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的20年1月10日和更新 ,请使用以下命令。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
对于MySQL 5.7.5及以上 ,以及MariaDB的20年10月1日及以上,使用:
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';
记住在此之后重新加载授予表。 在任一情况下,您都应该看到该命令已成功执行的确认。
Query OK, 0 rows affected (0.00 sec)
密码已更改,因此您现在可以停止数据库服务器的手动实例并重新启动它。

第5步 - 正常重新启动数据库服务器

首先,停止你手动启动第3步中的PID此命令搜索,或进程ID,MySQL或MariaDB的过程,并将数据库服务器的实例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密码是安全的,并且保持在安全的地方。