文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
信息 (Gzip) - 4.0Mb
信息 (Zip) - 4.0Mb


B.3.3.2 如何重置 root 密码

如果你从未为 MySQL 设定 root 密码,服务器不需要任何密码来以 root 用户身份连接。但是,这样做并不安全。有关分配密码的说明,请参见 第 2.9.4 节,“保护初始 MySQL 帐户”

如果你知道 root 密码并希望更改它,请参见 第 15.7.1.1 节,“ALTER USER 语句”第 15.7.1.10 节,“SET PASSWORD 语句”

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

B.3.3.2.1 重置 root 密码:Windows 系统

在 Windows 上,请使用以下步骤重置 MySQL 'root'@'localhost' 帐户的密码。要更改具有不同主机名部分的 root 帐户的密码,请修改说明以使用该主机名。

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

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

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

  3. 创建一个文本文件,其中包含一行密码分配语句。将密码替换为你想要使用的密码。

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

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

  6. 使用 init_file 系统变量设置为文件名称启动 MySQL 服务器(注意选项值中的反斜杠要加倍)

    C:\> cd "C:\Program Files\MySQL\MySQL Server 9.0\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 9.0\\my.ini"
             --init-file=C:\\mysql-init.txt

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

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

现在,你应该能够使用新密码以 root 用户身份连接到 MySQL 服务器。停止 MySQL 服务器并以正常方式重新启动它。如果你以服务形式运行服务器,请从 Windows 服务窗口启动它。如果你手动启动服务器,请使用你通常使用的任何命令。

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

在 Unix 上,请使用以下步骤重置 MySQL 'root'@'localhost' 帐户的密码。要更改具有不同主机名部分的 root 帐户的密码,请修改说明以使用该主机名。

这些说明假设你从你通常用于运行 MySQL 服务器的 Unix 登录帐户启动 MySQL 服务器。例如,如果你使用 mysql 登录帐户运行服务器,你应该以 mysql 用户身份登录,然后再使用这些说明。或者,你可以以 root 用户身份登录,但在这种情况下,你必须使用 --user=mysql 选项启动 mysqld。如果你以 root 用户身份启动服务器而未使用 --user=mysql,服务器可能会在数据目录中创建 root 拥有的文件(如日志文件),这些文件可能会导致以后启动服务器时出现权限相关问题。如果发生这种情况,你必须将文件的属主更改为 mysql 或删除它们。

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

  2. 如果 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 命令中。

  3. 创建一个文本文件,其中包含一行密码分配语句。将密码替换为你想要使用的密码。

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

  5. 使用 init_file 系统变量设置为文件名称启动 MySQL 服务器

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

    服务器在启动时执行 init_file 系统变量命名的文件内容,更改 'root'@'localhost' 帐户密码。

    根据你通常启动服务器的方式,可能还需要其他选项。例如,在 init_file 参数之前,可能需要 --defaults-file

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

现在,你应该能够使用新密码以 root 用户身份连接到 MySQL 服务器。停止服务器并以正常方式重新启动它。

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

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

  1. 如果需要,停止 MySQL 服务器,然后使用 --skip-grant-tables 选项重新启动它。这使任何人都可以在没有密码的情况下以所有权限连接,并禁用帐户管理语句,例如 ALTER USERSET PASSWORD。由于这很不安全,如果服务器使用 --skip-grant-tables 选项启动,它还会通过启用 skip_networking 来禁用远程连接。在 Windows 平台上,这意味着您还必须启用 shared_memorynamed_pipe;否则服务器无法启动。

  2. 使用 mysql 客户端连接到 MySQL 服务器;由于服务器使用 --skip-grant-tables 启动,因此不需要密码。

    $> mysql
  3. mysql 客户端中,告诉服务器重新加载授权表,以便帐户管理语句能够正常工作。

    mysql> FLUSH PRIVILEGES;

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

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

现在,您应该能够使用新密码以 root 身份连接到 MySQL 服务器。停止服务器并以正常方式重新启动它(不使用 --skip-grant-tables 选项,也不启用 skip_networking 系统变量)。