介绍
如果您忘记或丢失了您的MySQL或MariaDB数据库的根密码,您仍然可以获得访问和重置密码,如果您有访问服务器和一个sudo
启用的用户帐户。
本教程将涵盖如何为 MySQL 和 MariaDB 的较旧和较新版本重新设置根密码。
前提条件
要恢复您的 root MySQL/MariaDB 密码,您需要:
- 使用 sudo 用户访问运行 MySQL 或 MariaDB 的 Linux 服务器。
步骤 1 – 识别数据库版本
大多数现代的Linux发行版都配备了MySQL或MariaDB,这是一个非常受欢迎的Drop-in替代品,完全兼容MySQL,根据所使用的数据库和版本,您需要使用不同的命令来恢复根密码。
您可以通过以下命令检查您的版本:
1mysql --version
你会看到一些类似于MySQL的输出:
1[secondary_label MySQL output]
2mysql Ver 14.14 Distrib 5.7.16, for Linux (x86_64) using EditLine wrapper
或者为 MariaDB 输出这样的输出:
1[secondary_label MariaDB output]
2mysql Ver 15.1 Distrib 5.5.52-MariaDB, for Linux (x86_64) using readline 5.1
请记住您正在运行哪个数据库和哪个版本,因为您将在以后使用它们。
步骤 2 – 停止数据库服务器
要更改根密码,您必须事先关闭数据库服务器。
您可以用 MySQL 这样做:
1sudo systemctl stop mysql
对于MariaDB wtih来说:
1sudo systemctl stop mariadb
停止数据库服务器后,您将手动访问它以重置根密码。
步骤 3 – 重新启动数据库服务器而无需验证权限
如果您运行MySQL和MariaDB而不加载有关用户权限的信息,它将允许您使用根权限访问数据库命令行,而无需提供密码。
要做到这一点,您需要阻止数据库加载 _grant 表,该表存储用户特权信息. 因为这是一个安全风险,您还应该跳过网络,以防止其他客户端连接。
启动数据库,而不加载赠款表或启用网络:
1sudo mysqld_safe --skip-grant-tables --skip-networking &
此命令末尾的 ampersand 将使此过程在背景中运行,因此您可以继续使用您的终端。
现在你可以作为 root 用户连接到数据库,不应该要求密码。
1mysql -u root
您将立即看到数据库壳提示。
1[label MySQL prompt]
2Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
3
4mysql>
1[label MariaDB prompt]
2Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
3
4MariaDB [(none)]>
现在你有 root 访问权限,你可以更改 root 密码。
第4步:更改根密码
更改现代 MySQL 版本的根密码的一种简单方法是使用ALTER USER
命令,但此命令目前不会起作用,因为补贴表没有加载。
让我们告诉数据库服务器通过发出FLUSH PRIVILEGES
命令来重新加载授权表。
1FLUSH PRIVILEGES;
现在我们实际上可以更改根密码。
对于 MySQL 5.7.6 和更高版本以及 MariaDB 10.1.20 和更高版本,请使用以下命令。
1ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
对于 MySQL 5.7.5 或更高版本以及 MariaDB 10.1.20 或更高版本,请使用:
1SET PASSWORD FOR 'root'@'localhost' = PASSWORD('new_password');
请确保用您所选择的新密码代替new_password
。
美元(注)
** 注意**:如果ALTER USER
命令不起作用,它通常表明一个更大的问题,但是,您可以尝试UPDATE... SET
来重置根密码。
1UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE User = 'root' AND Host = 'localhost';
请记住在此之后重新加载补贴表。 <$>
在任何情况下,您都应该看到确认命令已成功执行。
1[secondary_label Output]
2Query OK, 0 rows affected (0.00 sec)
密码已更改,因此您现在可以停止数据库服务器的手动实例并像以前那样重新启动。
步骤 5 – 正常重新启动数据库服务器
首先,停止您在步骤 3 中手动启动的数据库服务器的实例,该命令会搜索 MySQL 或 MariaDB 流程的 PID 或进程 ID,并发送SIGTERM
,告诉它在执行清理操作后顺利退出。
对于MySQL,使用:
1sudo kill `cat /var/run/mysqld/mysqld.pid`
对于 MariaDB,使用:
1sudo kill `/var/run/mariadb/mariadb.pid`
然后,使用systemctl
重新启动服务。
对于MySQL,使用:
1sudo systemctl start mysql
对于 MariaDB,使用:
1sudo systemctl start mariadb
现在您可以通过运行确认新密码已被正确应用:
1mysql -u root -p
该命令现在应该提示新分配的密码。输入它,您应该按照预期获得访问数据库提示。
结论
您现在已经恢复了对 MySQL 或 MariaDB 服务器的管理访问权限,请确保您选择的新根密码强大、安全,并将其保存在安全位置。