如果您从未root
为 MySQL 分配密码,则服务器根本不需要密码来连接为root
. 然而,这是不安全的。有关分配密码的说明,请参阅
第 2.10.4 节,“保护初始 MySQL 帐户”。
如果您知道root
密码并想更改它,请参阅第 13.7.1.1 节,“ALTER USER 语句”和
第 13.7.1.7 节,“SET PASSWORD 语句”。
如果您root
之前指定了密码但忘记了,您可以指定一个新密码。以下部分提供了适用于 Windows 和 Unix 以及类 Unix 系统的说明,以及适用于任何系统的通用说明。
在 Windows 上,使用以下过程重置 MySQL'root'@'localhost'
帐户的密码。要更改
root
具有不同主机名部分的帐户的密码,请修改使用该主机名的说明。
以管理员身份登录到您的系统。
如果 MySQL 服务器正在运行,请将其停止。对于作为 Windows 服务运行的服务器,转到服务管理器:从开始菜单中选择 控制面板,然后 选择管理工具,然后 选择服务。在列表中找到 MySQL 服务并停止它。
如果您的服务器没有作为服务运行,您可能需要使用任务管理器强制它停止。
创建一个文本文件,在一行中包含密码分配语句。将密码替换为您要使用的密码。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
保存文件。此示例假定您将该文件命名为
C:\mysql-init.txt
.打开控制台窗口以进入命令提示符:从“开始”菜单中选择 “运行”,然后输入 cmd作为要运行的命令。
使用系统变量设置启动 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
设置。服务器启动成功后,删除
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;
在 Unix 上,使用以下过程重置 MySQL'root'@'localhost'
帐户的密码。要更改root
具有不同主机名部分的帐户的密码,请修改使用该主机名的说明。
这些说明假定您从通常用于运行它的 Unix 登录帐户启动 MySQL 服务器。例如,如果您使用
mysql
登录帐户运行服务器,您应该像
mysql
以前一样使用说明登录。或者,您可以登录为root
,但在这种情况下,您必须使用该
选项启动
mysqld 。--user=mysql
如果您在root
不使用
--user=mysql
的情况下启动服务器,服务器可能会创建root
- 数据目录中拥有的文件,例如日志文件,这些可能会导致以后服务器启动时出现与权限相关的问题。如果发生这种情况,您必须更改文件的所有权mysql
或删除它们。
以运行 MySQL 服务器的 Unix 用户身份(例如,
mysql
)登录到您的系统。如果 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
命令中。创建一个文本文件,在一行中包含密码分配语句。将密码替换为您要使用的密码。
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';
保存文件。此示例假定您将该文件命名为
/home/me/mysql-init
. 该文件包含密码,因此不要将其保存在其他用户可以读取的位置。如果您没有登录mysql
(服务器运行的用户),请确保该文件具有允许mysql
读取它的权限。init_file
使用设置的系统变量 启动 MySQL 服务器 以命名文件:$> mysqld --init-file=/home/me/mysql-init &
init_file
服务器在启动时执行系统变量 命名的文件内容,更改'root'@'localhost'
账号密码。其他选项也可能是必需的,具体取决于您通常如何启动服务器。例如, 在参数
--defaults-file
之前可能需要 。init_file
服务器启动成功后,删除
/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;
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):
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 asALTER USER
andSET PASSWORD
. Because this is insecure, you might want to use--skip-grant-tables
in conjunction with enabling theskip_networking
system variable to prevent remote clients from connecting.Connect to the MySQL server using the mysql client; no password is necessary because the server was started with
--skip-grant-tables
:$> mysql
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 aroot
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;