如何在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
密码,具体取决于已安装的命令,因此请按照本节中的步骤确定正在运行的数据库服务器。
使用以下命令检查您的版本:
如果您正在运行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的根 用户不提供密码:
您将立即看到数据库外壳提示:
现在,您可以访问数据库服务器了,您可以更改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用户身份连接到数据库:
您将立即看到数据库外壳提示:
现在您可以访问服务器了,您可以更改root 密码了。
步骤3 —更改根密码 数据库服务器现在在受限模式下运行;授权表未加载,并且未启用任何网络支持。这使您可以在不提供密码的情况下访问服务器,但是它禁止您执行更改数据的命令。要重置根 密码,必须先获得对服务器的访问权限,然后才能加载授权表。
发出以下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 用户身份使用密码登录来确认新密码是否有效:
复制
系统将提示您输入密码。输入新密码,您将可以按预期访问数据库提示。
结论 您已恢复对MySQL或MariaDB服务器的管理访问权限。确保您选择的新密码安全可靠,并将其保存在安全的地方。
有关用户管理,身份验证机制或其他版本的MySQL或MariaDB的数据库密码重置方式的详细信息,请参阅官方的MySQL文档 或MariaDB文档 。