如果您从未为 MySQL 分配过 root
密码,那么服务器不需要密码就可以连接为 root
。然而,这是不安全的。有关分配密码的说明,请参阅 第 2.9.4 节,“保护初始 MySQL 帐户”。
如果您知道 root
密码并想更改它,请参阅 第 15.7.1.1 节,“ALTER USER 语句” 和 第 15.7.1.10 节,“SET PASSWORD 语句”。
如果您之前曾经分配过 root
密码但是现在忘记了,可以分配一个新的密码。以下部分提供了 Windows 和 Unix 及 Unix-like 系统的说明,以及适用于任何系统的通用说明。
在 Windows 上,使用以下过程来重置 MySQL 'root'@'localhost'
帐户的密码。要更改具有不同主机名部分的 root
帐户的密码,请修改说明以使用该主机名。
-
以管理员身份登录系统。
-
停止 MySQL 服务器,如果它正在运行。对于作为 Windows 服务运行的服务器,请转到服务管理器:从
菜单中选择 ,然后选择 ,然后选择 。在列表中找到 MySQL 服务并停止它。如果您的服务器不是作为服务运行的,您可能需要使用任务管理器来强制停止它。
-
创建一个文本文件,其中包含密码分配语句在一行上。将密码替换为您想要使用的密码。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
-
保存文件。例如,假设您将文件命名为
C:\mysql-init.txt
。 -
打开一个控制台窗口以获取命令提示符:从 cmd 作为要运行的命令。
菜单中选择 ,然后输入 -
使用
init_file
系统变量设置名称的文件(注意选项值中的反斜杠是双倍的):C:\> cd "C:\Program Files\MySQL\MySQL Server 8.3\bin" C:\> mysqld --init-file=C:\\mysql-init.txt
如果您将 MySQL 安装到不同的位置,请相应地调整 cd 命令。
服务器在启动时执行由
init_file
系统变量命名的文件的内容,改变'root'@'localhost'
帐户的密码。要使服务器输出显示在控制台窗口中而不是日志文件中,请添加
--console
选项到 mysqld 命令。如果您使用 MySQL 安装向导安装了 MySQL,您可能需要指定
--defaults-file
选项。例如:C:\> mysqld --defaults-file="C:\\ProgramData\\MySQL\\MySQL Server 8.3\\my.ini" --init-file=C:\\mysql-init.txt
可以在服务管理器中找到适当的
--defaults-file
设置:从 菜单中选择 ,然后选择 ,然后选择 。在列表中找到 MySQL 服务,右键单击它,并选择属性
选项。Path to executable
字段包含--defaults-file
设置。 -
服务器启动成功后,删除
C:\mysql-init.txt
。
现在您应该能够使用新密码连接到 MySQL 服务器作为 root
。停止 MySQL 服务器并正常启动它。如果您以服务形式运行服务器,请从 Windows 服务窗口启动它。如果您手动启动服务器,请使用您通常使用的命令。
在 Unix 上,使用以下过程来重置 MySQL 'root'@'localhost'
帐户的密码。要更改具有不同主机名部分的 root
帐户的密码,请修改说明以使用该主机名。
说明假设您从通常用于运行它的 Unix 登录帐户启动 MySQL 服务器。例如,如果您使用 mysql
登录帐户运行服务器,那么您应该以 mysql
登录,然后使用说明。或者,您可以以 root
登录,但是在这种情况下,您 必须 使用 mysqld 选项启动 --user=mysql
。如果您以 root
启动服务器而不使用 --user=mysql
,服务器可能会在数据目录中创建 root
所拥有的文件,例如日志文件,这些文件可能会导致未来服务器启动时出现权限相关的问题。如果发生这种情况,您必须将文件的所有权更改为 mysql
或删除它们。
-
以 MySQL 服务器运行的 Unix 用户身份登录(例如,
mysql
)。 -
停止正在运行的 MySQL 服务器。找到包含服务器进程 ID 的
.pid
文件。该文件的确切位置和名称取决于您的发行版、主机名和配置。常见的位置是/var/lib/mysql/
、/var/run/mysqld/
和/usr/local/mysql/data/
。一般来说,该文件名以.pid
结尾,并以mysqld
或系统的主机名开头。使用正常的
kill
(不是kill -9
)命令停止 MySQL 服务器进程。使用以下命令,使用实际的.pid
文件路径名:$> kill `cat /mysql-data-directory/host_name.pid`
使用反引号(而不是双引号)与
cat
命令。这些将cat
的输出替换到kill
命令中。 -
创建一个包含密码分配语句的文本文件。将密码替换为您想要使用的密码。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
-
保存文件。例如,假设您将文件命名为
/home/me/mysql-init
。该文件包含密码,因此请不要将其保存在其他用户可以读取的地方。如果您不是以mysql
用户身份登录(服务器运行的用户),请确保文件具有允许mysql
读取的权限。 -
使用
init_file
系统变量设置文件名启动 MySQL 服务器:$> mysqld --init-file=/home/me/mysql-init &
服务器在启动时执行文件的内容,改变
'root'@'localhost'
帐户的密码。可能还需要其他选项,具体取决于您通常如何启动服务器。例如,可能需要
--defaults-file
选项在init_file
选项之前。 -
服务器成功启动后,删除
/home/me/mysql-init
。
现在,您应该能够使用新密码连接到 MySQL 服务器作为 root
。停止服务器并正常重新启动。
前面的部分提供了 Windows 和 Unix 及 Unix-like 系统的密码重置说明。或者,在任何平台上,您可以使用 mysql 客户端重置密码(但这种方法不太安全):
-
如果必要,停止 MySQL 服务器,然后使用
--skip-grant-tables
选项重新启动它。这使得任何人都可以无需密码连接并拥有所有权限,并禁用了帐户管理语句,例如ALTER USER
和SET PASSWORD
。由于这不安全,如果服务器使用--skip-grant-tables
选项启动,它还禁用了远程连接,启用了skip_networking
。 -
使用 mysql 客户端连接到 MySQL 服务器;不需要密码,因为服务器使用
--skip-grant-tables
选项启动:$> mysql
-
在
mysql
客户端中,告诉服务器重新加载授权表,以便帐户管理语句生效:mysql> FLUSH PRIVILEGES;
然后更改
'root'@'localhost'
帐户密码。将密码替换为您想要使用的密码。要更改具有不同主机名部分的root
帐户密码,请修改说明以使用该主机名。mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
现在,您应该能够使用新密码作为 root
连接到 MySQL 服务器。停止服务器并正常重新启动它(不使用 --skip-grant-tables
选项且不启用 skip_networking
系统变量)。