在Ubuntu 18.04上,如何重置你的MySQL或MariaDB root密码

・1 分钟阅读

前提条件

要恢复你的MySQL或MariaDB root密码,你需要:

使用sudo用户或其他方式访问运行MySQL或MariaDB的Ubuntu 18.04服务器,或者使用root权限访问服务器,然后按照 在Ubuntu 18.04上,如何安装MySQL 安装MySQL。

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

Ubuntu 18.04运行的是MySQL或MariaDB,它是一个流行的替代插件,它完全兼容MySQL ,你需要使用不同的命令来恢复root安装的密码,因此按照本节中的步骤确定你运行的数据库服务器。

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


mysql --version

如果运行MariaDB,则会在输出中看到"MariaDB"前面的版本号:


MariaDB outputmysql Ver 15.1 Distrib 10.1.29-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2

如果运行MySQL,你将看到类似这样的输出:


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

记下哪个数据库,因为这决定了本教程余下部分要遵循的适当命令。

要更改root密码,你需要关闭数据库服务器,如果正在运行MariaDB,则可以使用以下命令执行这个操作:


sudo systemctl stop mariadb

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


sudo systemctl stop mysql

停止数据库后,可以在安全模式下重新启动该数据库以重置root密码。

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

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

使用systemd单元文件为MariaDB服务器守护进程设置额外的参数,以便启动不使用grant表的MariaDB服务器。

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


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

然后启动MariaDB服务器:


sudo systemctl start mariadb

这个命令不会产生输出,但是它会重启数据库服务器,考虑到新的环境变量设置。

你可以确保它以 sudo systemctl status mariadb

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


sudo mysql -u root

你将立即看到一个数据库shell提示符:


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

MariaDB [(none)]>

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

将MySQL配置为在不授予表的情况下启动

要执行这个操作,请执行以下命令:


sudo systemctl edit mysql

此命令将在nano编辑器中打开一个新文件,你将使用该文件编辑MySQL重写的服务,这些更改了MySQL的默认服务参数,此文件为空,因此添加以下内容:

MySQL服务替代

[Service]
ExecStart=
ExecStart=/usr/sbin/mysqld --daemonize --pid-file=/run/mysqld/mysqld.pid --skip-grant-tables --skip-networking

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

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

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


sudo systemctl daemon-reload

现在启动MySQL服务器:


sudo systemctl start mysql

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

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


sudo mysql -u root

你将立即看到一个数据库shell提示符:


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

mysql>

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

步骤3-更改Root密码

数据库服务器现在以有限模式运行; 未加载授权表,也没有启用网络支持,这样可以访问服务器而不提供密码,但是它禁止你执行更改数据的命令,如果要重新设置root密码,你必须立即加载授权表,因为你已经访问了服务器。

通知数据库服务器通过发出FLUSH PRIVILEGES命令来重新加载授予表。


FLUSH PRIVILEGES;

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

更改MariaDB密码

如果使用MariaDB,请执行以下语句来设置root帐户的密码,确保用新密码替换new_password


UPDATE mysql.user SET password = PASSWORD('new_password') WHERE user = 'root';

你将看到此输出表明密码已更改:


OutputQuery OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

MariaDB允许使用自定义身份验证机制,因此执行以下两个语句以确保MariaDB将它默认身份验证机制用于root帐户:


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

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


OutputQuery OK, 0 rows affected (0.01 sec)
Rows matched: 1 Changed: 0 Warnings: 0

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

更改MySQL密码

对于MySQL,执行以下语句以更改用户的root密码,并用你的密码替换new_password


UPDATE mysql.user SET authentication_string = PASSWORD('new_password') WHERE user = 'root';

你将看到此输出表明密码已成功更改:


OutputQuery OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

MySQL允许使用自定义身份验证机制,因此执行以下语句告诉MySQL使用它默认身份验证机制使用新密码对root用户进行身份验证:


UPDATE mysql.user SET plugin = 'mysql_native_password' WHERE user = 'root';

你将看到与前面的命令类似的输出:


OutputQuery OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0

密码已更改,通过键入exit退出MySQL控制台。

在正常运行模式下重启数据库。

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

为了在正常模式下重新启动数据库服务器,必须恢复所做的更改,并加载授予表,同样,使用的方法取决于你使用的是MariaDB还是MySQL 。

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


sudo systemctl unset-environment MYSQLD_OPTS

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


sudo systemctl restart mariadb

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


sudo systemctl revert mysql

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


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

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


sudo systemctl daemon-reload

最后,重新启动服务:


sudo systemctl restart mysql

数据库现在已重新启动,并恢复到正常状态,通过使用密码作为root用户登录来确认新密码是否有效:


mysql -u root -p

你将被提示输入新密码。

结束语

你已经恢复了对MySQL或MariaDB服务器的管理访问,确保你选择的新密码是强大的并且安全的,并将它保存在安全的地方。

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

讨论
Yangchunyan110 profile image