如果您从未为MySQL分配root
密码,则服务器根本不需要以root
身份连接的密码。但是,这是不安全的。建议一定要设置root密码。
如果您知道root
密码并想要更改它,推荐使用ALTER USER user IDENTIFIED BY 'auth_string';
如果您之前分配了root
密码但忘记了,您可以分配一个新密码。以下部分提供了适用于Windows、Unix和类Unix系统的说明,以及适用于任何系统的通用说明。
第一、重置root密码:Windows系统
在Windows上,使用以下步骤重置MySQL'root'@'localhost'
帐户的密码。要更改具有不同主机名部分的root
帐户的密码,请在下面的步骤上把localhost修改为您的主机名。
-
以管理员身份登录系统。
-
如果MySQL服务器正在运行,则停止它。对于作为Windows服务运行的服务器,请转到服务管理器:从开始菜单中,选择控制面板,然后选择管理工具,然后选择服务。在列表中找到MySQL服务并停止它。如果您的服务器没有作为服务运行,您可能需要使用任务管理器强制它停止。
-
创建一个包含密码修改语句的文本文件。将密码替换为您要使用的密码。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
-
保存该文件。此示例假定您将文件命名为
C:\mysql-init.txt
。 -
打开控制台窗口进入命令提示符:从开始菜单中,选择运行,然后输入cmd作为要运行的命令。
- 使用init_file系统变量启动MySQL服务器(注意init-file选项中使用两个反斜杠),
如果您将MySQL安装到不同的位置,请相应地调整cd命令。服务器在启动时执行由init_file系统变量命名的文件的内容,更改'root'@'localhost'帐户密码。:
C:\> cd "C:\Program Files\MySQL\MySQL Server 8.4\bin" C:\> mysqld --init-file=C:\\mysql-init.txt
要使服务器输出显示在控制台窗口而不是日志文件中,请将--console选项添加到mysqld命令中。 如果使用MySQL安装向导安装MySQL,则可能需要指定--defaults-file
--defaults-file选项。例如:
C:\> mysqld
--defaults-file="C:\\ProgramData\\MySQL\\MySQL Server 8.4\\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服务窗口启动它。如果您手动启动服务器,请使用您通常使用的任何命令。
第二、重置root密码:Unix和类Unix系统
在Unix上,使用以下步骤重置MySQL'root'@'localhost'
帐户的密码。要更改具有不同主机名部分的root
帐户的密码,请在下面的步骤上把localhost修改为您的主机名。
这些说明假定您从通常用于运行MySQL服务器的Unix登录帐户启动服务器。例如,如果您使用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`
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服务器。停止服务器并正常重新启动它。
第三、重置root密码:通用说明
前面的部分提供了专门针对Windows、Unix和类Unix系统的密码重置说明。或者,在任何平台上,您都可以使用mysql客户端重置密码(但这种方法不太安全):
1、如有必要,停止MySQL服务器,然后使用--skip-grant-tables选项重新启动它。这使任何人都可以在没有密码的情况下以所有权限进行连接,并禁用帐户管理语句,例如ALTER USER和SET PASSWORD。因为这是不安全的,如果服务器使用--skip-grant-tables选项启动,它还会通过启用skip_networking来禁用远程连接。在Windows平台上,这意味着您还必须启用shared_memory或named_pipe;否则服务器无法启动。
2、使用mysql客户端连接到MySQL服务器;不需要密码,因为服务器是使用--skip-grant-tables启动的:
$> mysql
3、在mysql客户端中,告诉服务器重新加载授权表,以便帐户管理语句工作:
mysql> FLUSH PRIVILEGES;
然后更改'root'@'localhost'帐户密码。将密码替换为要使用的密码。要更改具有不同主机名部分的root帐户的密码,请修改localhost以使用您的主机名。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
您现在应该能够使用新密码以root身份连接到MySQL服务器。停止服务器并正常重新启动它(注意不再设置--skip-grant-tables选项,也没有启用skip_networking系统变量)。