mysql 重置 root 密码
Windows
- 以管理员身份登陆操作系统。
-
关闭MySQL服务
在服务管理器中停止MySQL服务,或直接在任务管理器中杀死进程。
-
创建并保存含有密码赋值语句的文本文件。
新建文本文件 C:\mysql-init.txt ,写入以下相应语句并保存。
MySQL 5.7.6 以及后续版本:
12ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';MySQL 5.7.5 以及早期版本:
12SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');或者直接修改user表:
12345UPDATE mysql.userSET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N'WHERE User = 'root' AND Host = 'localhost';FLUSH PRIVILEGES; - 打开命令行,使用带有参数
--init-file
的 mysqld 来启动服务。12mysqld --init-file=C:\\mysql-init.txtPS:使用
--console
参数可以将日志信息输出到控制台。 -
重新以常规方式启动MySQL服务。
Unix and Unix-Like
-
以 MySQL 服务启动者的账户登录系统,(如
mysql
)。 -
停止 MySQL 服务:
12$ kill `cat /mysql-data-directory/host_name.pid`pid 文件中写有 MySQL 服务的进程ID,该文件的具体路径取决于服务启动时使用的配置参数。
-
创建含有密码赋值语句的文本文件。
MySQL 5.7.6 以及后续版本:
12ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';MySQL 5.7.5 以及早期版本:
12SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');或者直接修改user表:
12345UPDATE mysql.userSET authentication_string = PASSWORD('MyNewPass'), password_expired = 'N'WHERE User = 'root' AND Host = 'localhost';FLUSH PRIVILEGES; - 保存文件。本例中保存到
/home/me/mysql-init
。该文件中包含有密码,因此不要将该文件放置在其他用户可见的位置。如果不是以mysql
(服务启动者账户)登陆的,那么需要给mysql
用户读该文件的权限。 -
使用参数
--init-file
启动 MySQL 服务:12$ mysqld_safe --init-file=/home/me/mysql-init &服务启动后将执行
--init-file
指定文件中的语句,修改'root'@'localhost'
账户的密码。 -
服务成功启动后,删除
/home/me/mysql-init
。
此时你将能够使用新的密码以 root 账户登录到 MySQL 服务了。停止MySQL服务并以常规方式重新启动。
通用方式
- 关闭长在运行的 MySQL 服务,使用参数
--skip-grant-tables
启动 MySQL 服务。该参数允许任何用户无需密码验证即可连接到数据库服务且拥有所有权限,同时,该参数也将使账户管理命令如ALTER USER
和SET PASSWORD
暂时失效。因为这种启动方式是不安全的,因此建议在操作期间同时使用参数
--skip-networking
来屏蔽远程客户端的连接。 -
使用
mysql
客户端直接登陆:12mysql此时因使用了
--skip-grant-tables
参数,登陆时无需指定用户和密码。 -
在
mysql
客户端中,让服务重新加载 grant 表以便账户管理命令可以正常使用:12mysql> FLUSH PRIVILEGES;随后修改
'root'@'localhost'
账户的密码。MySQL 5.7.6 及后续版本:
123mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';MySQL 5.7.5 及更早版本:
123mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('MyNewPass');
此时, root 账户能够使用新的密码登录到 MySQL 服务了。
停止MySQL服务并以常规方式重新启动(不使用 --skip-grant-tables
和--skip-networking
参数)。
如果 ALTER USER
等命令执行失败,可以使用下面的命令直接修改 user
表:
1 2 3 4 |
UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPass') WHERE User = 'root' AND Host = 'localhost'; FLUSH PRIVILEGES; |
注意:直接修改 user 表的方式在新旧版本中有所不同,旧版 mysql 中存放密码的字段是 Password
,因此使用下面命令:
1 2 3 |
UPDATE mysql.user SET Password=PASSWORD('new password') WHERE User='root'; FLUSH PRIVILEGES; |