B.4.3.2 如何重置 root 密码

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

如果您知道root密码并想要更改它,请参阅第 13.7.1.1 节“ ALTER USER 语句”第 13.7.1.7 节“ SET PASSWORD 语句”

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

B.4.3.2.1 重置根密码:Windows 系统

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

如果服务器未作为服务运行,则可能需要使用任务 Management 器强制其停止。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
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

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

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

如果ALTER USER语句未能重置密码,请尝试使用以下语句重复该过程以直接修改usertable:

UPDATE mysql.user
    SET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N'
    WHERE User = 'root' AND Host = 'localhost';
FLUSH PRIVILEGES;
B.4.3.2.2 重置根密码:Unix 和类似 Unix 的系统

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

这些说明假定您将从通常用于运行它的 Unix 登录帐户启动 MySQL 服务器。例如,如果使用mysql登录帐户运行服务器,则在使用说明之前,应以mysql身份登录。另外,您也可以使用root身份登录,但是在这种情况下,您必须*带有--user=mysql选项才能开始mysqld。如果不使用--user=mysql就以root的身份启动服务器,则服务器可能会在数据目录中创建root拥有的文件,例如日志文件,并且这些文件可能会导致与权限有关的问题,以备将来服务器启动时使用。如果发生这种情况,您将需要将文件的所有权更改为mysql或将其删除。

通过向mysqld进程发送普通的kill(而不是kill -9)来停止 MySQL 服务器。在以下命令中使用.pid文件的实际路径名:

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

cat命令使用反引号(而不是正引号)。这些导致cat的输出被替换为kill命令。

ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
shell> mysqld --init-file=/home/me/mysql-init &

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

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

现在,您应该可以使用新密码以root的身份连接到 MySQL 服务器。停止服务器并正常重启。

如果ALTER USER语句未能重置密码,请尝试使用以下语句重复该过程以直接修改usertable:

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

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

shell> mysql
mysql> FLUSH PRIVILEGES;

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

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

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

如果ALTER USER语句未能重置密码,请尝试使用以下语句重复该过程以直接修改usertable:

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