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