Documentation Home

B.3.3.2 如何重置root密码

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

如果您知道root密码并想更改它,请参阅第 13.7.1.1 节,“ALTER USER 语句”第 13.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. 使用系统变量设置启动 MySQL 服务器 init_file以命名文件(注意选项值中的反斜杠加倍):

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

    --defaults-file可以使用服务管理器找到 适当的 设置:从“开始”菜单中选择 “控制面板”,然后 选择“管理工具”,然后 选择“服务” 。在列表中找到 MySQL 服务,右键单击它,然后选择该 Properties选项。该Path to executable字段包含 --defaults-file设置。

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

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

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

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

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

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

  2. 如果 MySQL 服务器正在运行,请将其停止。找到 .pid包含服务器进程 ID 的文件。该文件的确切位置和名称取决于您的发行版、主机名和配置。常见位置是 /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'账号密码。

    其他选项也可能是必需的,具体取决于您通常如何启动服务器。例如, 在参数 --defaults-file之前可能需要 。init_file

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

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

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

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

  1. 如有必要,请停止 MySQL 服务器,然后使用该--skip-grant-tables 选项重新启动它。这使任何人都可以在没有密码和所有权限的情况下进行连接,并禁用帐户管理语句,例如 ALTER USERSET PASSWORD。因为这是不安全的,如果服务器以该 --skip-grant-tables 选项启动,它还会通过启用来禁用远程连接 skip_networking

  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系统变量)。