# B.3.3.2 如何重置 Root 密码

如果您从未分配过MySQL 的密码,服务器根本不需要密码来连接.然而,这是不安全的。有关分配密码的说明,请参阅第 2.10.4 节,“保护初始 MySQL 帐户”.

如果你知道密码并想更改它,请参阅第 13.7.1.1 节,“ALTER USER 语句”, 和第 13.7.1.10 节,“SET PASSWORD 语句”.

如果您分配了一个以前的密码但忘记了,您可以分配一个新密码。以下部分提供了适用于 Windows 和 Unix 和类 Unix 系统的说明,以及适用于任何系统的通用说明。

# B.3.3.2.1 重置 Root 密码:Windows 系统

在 Windows 上,使用以下过程重置 MySQL 的密码'根'@'本地主机'帐户。更改密码具有不同主机名部分的帐户,请修改说明以使用该主机名。

  1. 以管理员身份登录您的系统。

  2. 如果 MySQL 服务器正在运行,请停止它。对于作为 Windows 服务运行的服务器,请转到服务管理器:从开始菜单中,选择控制面板,然后选择管理工具,然后选择服务。在列表中找到 MySQL 服务并停止它。

    如果您的服务器没有作为服务运行,您可能需要使用任务管理器强制它停止。

  3. 创建一个包含单行密码分配语句的文本文件。将密码替换为您要使用的密码。

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
    
  4. 保存文件。此示例假定您将文件命名为C:\mysql-init.txt.

  5. 打开控制台窗口以进入命令提示符:从“开始”菜单中,选择“运行”,然后输入命令作为要运行的命令。

  6. 使用以下命令启动 MySQL 服务器初始化文件设置为文件命名的系统变量(注意选项值中的反斜杠加倍):

    C:\> cd "C:\Program Files\MySQL\MySQL Server 8.0\bin"
    C:\> mysqld --init-file=C:\\mysql-init.txt
    

    如果您将 MySQL 安装到其他位置,请调整光盘相应地命令。

    服务器执行由初始化文件系统变量在启动时,改变'根'@'本地主机'户口密码。

    要使服务器输出出现在控制台窗口而不是日志文件中,请添加- 安慰选项mysqld命令。

    如果您使用 MySQL 安装向导安装 MySQL,您可能需要指定一个--defaults 文件选项。例如:

    C:\> mysqld
             --defaults-file="C:\\ProgramData\\MySQL\\MySQL Server 8.0\\my.ini"
             --init-file=C:\\mysql-init.txt
    

    适当的--defaults 文件可以使用服务管理器找到设置:从开始菜单中选择控制面板,然后选择管理工具,然后选择服务。在列表中找到 MySQL 服务,右键单击它,然后选择特性选项。这可执行文件路径字段包含--defaults 文件环境。

  7. 服务器启动成功后,删除C:\mysql-init.txt.

    您现在应该能够连接到 MySQL 服务器使用新密码。停止 MySQL 服务器并正常重新启动它。如果您将服务器作为服务运行,请从 Windows 服务窗口启动它。如果您手动启动服务器,请使用您通常使用的任何命令。

# B.3.3.2.2 重置 Root 密码:Unix 和类 Unix 系统

在 Unix 上,使用以下过程重置 MySQL 的密码'根'@'本地主机'帐户。更改密码具有不同主机名部分的帐户,请修改说明以使用该主机名。

这些说明假定您从通常用于运行它的 Unix 登录帐户启动 MySQL 服务器。例如,如果您使用mysql登录帐户,您应该登录为mysql在使用说明之前。或者,您可以登录为,但在这种情况下,你必须开始mysqld--用户=mysql选项。如果您将服务器启动为不使用--用户=mysql,服务器可以创建- 数据目录中的文件,例如日志文件,这些可能会导致未来服务器启动的权限相关问题。如果发生这种情况,您必须将文件的所有权更改为mysql或删除它们。

  1. 以 MySQL 服务器运行的 Unix 用户身份登录到您的系统(例如,mysql)。

  2. 如果 MySQL 服务器正在运行,请停止它。找到.pid包含服务器进程 ID 的文件。此文件的确切位置和名称取决于您的发行版、主机名和配置。常见的位置是/var/lib/mysql/,/var/运行/mysqld/, 和/usr/local/mysql/数据/.通常,文件名的扩展名为.pid并以任一开头mysqld或系统的主机名。

    通过发送一个普通的来停止 MySQL 服务器(不是杀死 -9) 到mysqld过程。使用实际路径名.pid文件中的以下命令:

    $> kill `cat /mysql-data-directory/host_name.pid`
    

    使用反引号(不是正引号)和命令。这些导致输出被代入命令。

  3. 创建一个包含单行密码分配语句的文本文件。将密码替换为您要使用的密码。

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
    
  4. 保存文件。此示例假定您将文件命名为/home/me/mysql-init.该文件包含密码,因此请勿将其保存在其他用户可以读取的位置。如果您没有登录为mysql(服务器运行的用户),确保文件具有允许的权限mysql阅读它。

  5. 使用以下命令启动 MySQL 服务器初始化文件系统变量设置为文件命名:

    $> mysqld --init-file=/home/me/mysql-init &
    

    服务器执行由初始化文件系统变量在启动时,改变'根'@'本地主机'户口密码。

    其他选项也可能是必需的,具体取决于您通常如何启动服务器。例如,--defaults 文件之前可能需要初始化文件争论。

  6. 服务器启动成功后,删除/home/me/mysql-init.

    您现在应该能够连接到 MySQL 服务器使用新密码。停止服务器并正常重新启动它。

# B.3.3.2.3 重置 Root 密码:通用说明

前面的部分提供了专门针对 Windows 和 Unix 以及类 Unix 系统的密码重置说明。或者,在任何平台上,您都可以使用mysql客户端(但这种方法不太安全):

  1. 如有必要,停止 MySQL 服务器,然后使用--skip-grant-tables选项。这使任何人都可以在没有密码和所有权限的情况下进行连接,并禁用帐户管理语句,例如更改用户设置密码.因为这是不安全的,如果服务器以--skip-grant-tables选项,它还通过启用禁用远程连接跳过网络.

  2. 使用连接到 MySQL 服务器mysql客户;不需要密码,因为服务器是用--skip-grant-tables

    $> mysql
    
  3. 在里面mysql客户端,告诉服务器重新加载授权表,以便帐户管理语句起作用:

    mysql> FLUSH PRIVILEGES;
    

    然后更改'根'@'本地主机'户口密码。将密码替换为您要使用的密码。更改密码具有不同主机名部分的帐户,请修改说明以使用该主机名。

    mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
    

    您现在应该能够连接到 MySQL 服务器使用新密码。停止服务器并正常重新启动它(没有--skip-grant-tables选项并且不启用跳过网络系统变量)。