Documentation Home

B.3.3.2 如何重置root密码

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

如果您知道root密码并想更改它,请参阅第 13.7.1.1 节,“ALTER USER 语句”第 13.7.1.7 节,“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 5.7\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 5.7\\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 服务窗口启动它。如果您手动启动服务器,请使用您通常使用的任何命令。

如果该ALTER USER语句重置密码失败,请尝试使用以下语句重复该过程 user直接修改表:

UPDATE mysql.user
    SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N'
    WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;
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 服务器。停止服务器并正常重启。

如果该ALTER USER语句重置密码失败,请尝试使用以下语句重复该过程 user直接修改表:

UPDATE mysql.user
    SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N'
    WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;
B.3.3.2.3 重置根密码:通用说明

The preceding sections provide password-resetting instructions specifically for Windows and Unix and Unix-like systems. Alternatively, on any platform, you can reset the password using the mysql client (but this approach is less secure):

  1. Stop the MySQL server if necessary, then restart it with the --skip-grant-tables option. This enables anyone to connect without a password and with all privileges, and disables account-management statements such as ALTER USER and SET PASSWORD. Because this is insecure, you might want to use --skip-grant-tables in conjunction with enabling the skip_networking system variable to prevent remote clients from connecting.

  2. Connect to the MySQL server using the mysql client; no password is necessary because the server was started with --skip-grant-tables:

    $> mysql
  3. In the mysql client, tell the server to reload the grant tables so that account-management statements work:

    mysql> FLUSH PRIVILEGES;

    Then change the 'root'@'localhost' account password. Replace the password with the password that you want to use. To change the password for a root account with a different host name part, modify the instructions to use that host name.

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

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

如果该ALTER USER语句重置密码失败,请尝试使用以下语句重复该过程 user直接修改表:

UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPass')
WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;