Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


B.3.3.2 如何重置 root 密码

如果您从未为 MySQL 分配了 root 密码,服务器就不需要密码来连接为 root。然而,这是非常不安全的。关于分配密码的说明,请参阅第2.9.4节,“Securing the Initial MySQL Account”

如果您知道 root 密码并想更改它,请参阅第15.7.1.1节,“ALTER USER Statement”第15.7.1.10节,“SET PASSWORD Statement”

如果您之前分配了 root 密码,但已经忘记了,可以分配新的密码。以下各节提供了 Windows 和 Unix 和 Unix 类系统的指南,以及通用的指南。

在 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 系统变量将服务器启动,以名称文件:

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

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

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

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

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

指令假设您使用Unix登录帐户启动MySQL服务器。例如,如果您使用mysql登录帐户,您应该以mysql身份登录。Alternatively,您可以以root身份登录,但是在这种情况下,您必须使用mysqld命令启动服务器,并使用--user=mysql选项。如果您作为root启动服务器而不使用--user=mysql,服务器可能会在数据目录中创建root-所有权的文件,如日志文件,这可能会导致未来服务器启动时的权限问题。如果发生这种情况,您必须将文件所有权更改为mysql或删除它们。

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

  2. 如果服务器正在运行,请停止它。找到包含服务器进程ID的.pid文件。文件的位置和名称取决于您的分布、主机名和配置。常见的位置是/var/lib/mysql//var/run/mysqld//usr/local/mysql/data/。通常,文件名以.pid结尾,并以mysqld或您的系统主机名开头。

    停止 MySQL 服务器,发送一个正常的 kill (不是 kill -9) 到 mysqld 进程。使用实际的 .pid 文件路径在以下命令中:

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

    使用反引号(不是前引号)与 cat 命令。这些将导致 cat 命令的输出被 substituted 到 kill 命令中。

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

    ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
  4. 保存文件。这一例假设您将文件命名为 /home/me/mysql-init。文件包含密码,因此不要将其保存在其他用户可以读取的地方。如果您不是以 mysql 用户身份登录,确保文件的权限允许 mysql 用户读取它。

  5. 使用 init_file 系统变量将文件名设置为:

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

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

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

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

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

前面的部分提供了 Windows 和 Unix 等平台上的密码重置指南。Alternatively,任何平台上,您可以使用 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';

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