Skip to content

重置 MySQL 密码

【方法 1】以安全模式重启

1.1 关闭 MySQL 服务

使用系统上的管理员权限执行下面的命令:

bash
# 对于 MySQL 5.x
net stop mysql

# 对于 MySQL 8.0
net stop mysql80
bash
service mysql stop
# 或者是
systemctl stop mysqld.service
bash
mysql.server stop

1.2 以安全模式启动 MySQL

bash
mysqld_safe --skip-grant-tables &
# 或者是
mysqld --skip-grant-tables &

1.3 执行 SQL 语句

下面的部分是 MySQL 交互命令的内容(不同版本命令有区别):

sql
FLUSH PRIVILEGES;
UPDATE `mysql`.`user` SET `password`=PASSWORD('新密码') WHERE `user`='root';
FLUSH PRIVILEGES;
EXIT;
sql
FLUSH PRIVILEGES;
UPDATE `mysql`.`user` SET `authentication_string`=PASSWORD('新密码') WHERE `user`='root';
FLUSH PRIVILEGES;
EXIT;
sql
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
FLUSH PRIVILEGES;
EXIT;

1.4 启动 MySQL 服务

使用系统上的管理员权限执行下面的命令:

bash
# 对于 MySQL 5.x
net start mysql

# 对于 MySQL 8.0
net start mysql80
bash
service mysql start
# 或者是
systemctl start mysqld.service
bash
mysql.server start

【方法 2】修改配置文件

2.1 修改配置文件

修改前关闭 MySQL 服务,可参考 上一节

修改 my.cnf(可能是 /etc/my.cnf/etc/mysql/my.cnf),在 [mysqld] 后添加 skip-grant-tables

如果没有选项 [mysqld],添加 [mysqld] 到配置文件中,并保存。

2.2 重启 MySQL 服务

bash
# 对于 MySQL 5.x
net stop mysql
net start mysql

# 对于 MySQL 8.0
net stop mysql80
net start mysql80
bash
service mysql restart
# 或者是
systemctl restart mysqld.service
bash
mysql.server restart

2.3 进入 MySQL 执行 SQL 语句

现在可以不用密码进入服务器:

sql
mysql -u root

下面跳转到 执行 SQL 语句,执行上述 SQL。

2.4 修改回原配置

删除上述配置,然后重启 MySQL 服务。