MySql修改密码与密码重置

忘密码这种事,常有的事~~o( ̄▽ ̄)ゞ)) ̄▽ ̄)o
不过我至少设置的密码复杂性还可以~以至于我每次都不可能猜对…..

修改密码

MySQL 的“root”用户默认状态是没有密码的,目前稍微新一点的版本首次启动都是将密码打印在日志文件中,可以使用 grep 'temporary password' /var/log/mysqld.log 查看。

如果您想为 MySQL 中的“root”用户设置密码,请在控制台中使用“mysqladmin”命令。例如:

mysqladmin.exe -u root password 123456

另外,如果是先前有密码,则修改命令为:

mysqladmin.exe -u root -p password 123456

回车后提示你输入当前密码,确认后会被修改为新密码

Linux 可以尝试在 ls /usr/bin/mysql* 下寻找

重置密码

因为我用的是 centOS,所以我使用第一种方法成功重置了,其他的没测试

安全模式重置法

基本的思路是,以安全模式启动mysql,这样不需要密码可以直接以root身份登录,然后重设密码。
首先,我们停掉MySQL服务:service mysql stop

上面的命令适用于Ubuntu和Debian。CentOS、Fedora和RHEL下使用mysqld替换mysql

以安全模式启动MySQL:
mysqld_safe --skip-grant-tables --skip-networking &

注意我们加了--skip-networking,避免远程无密码登录 MySQL。
这样我们就可以直接用root登录,无需密码:mysql -u root
接着重设密码:

1
2
3
mysql> use mysql;
mysql> update user set password=PASSWORD("mynewpassword") where User='root';
mysql> flush privileges;

注意,命令后需要加分号。
重设完毕后,我们退出(quit 或者 exit),然后启动 MySQL 服务:
重启服务:service mysql restart

同样,以上命令适用于Ubuntu和Debian,Centos、Fedora和RHEL需要用mysqld替换mysql。

现在可以尝试用新密码登录了:mysql -u root -pmynewpassword

注意,-p 和密码间不能有空格。
推荐使用mysql -u root -p然后回车再输密码

高版本重置

我测试 MySQL8 版本中,mysqld_safe 这个命令已经不存在了,从 stackoverflow 找到了一种可行方案:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 1. Stop mysql:
systemctl stop mysqld

# 2. Set the mySQL environment option
systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

# 3. Start mysql usig the options you just set
systemctl start mysqld

# 4. Login as root
mysql -u root

# 5. Update the root user password with these mysql commands
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('MyNewPassword')
-> WHERE User = 'root' AND Host = 'localhost';
mysql> FLUSH PRIVILEGES;
mysql> quit

# As mentioned my shokulei in the comments, for 5.7.6 and later, you should use
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass';

# 6. Stop mysql
systemctl stop mysqld

# 7. Unset the mySQL envitroment option so it starts normally next time
systemctl unset-environment MYSQLD_OPTS

# 8. Start mysql normally:
systemctl start mysqld

# 9. Try to login using your new password:
mysql -u root -p

我还遇到的其他问题:

密码过于简单?新版加密规则 Nav 不认?外网用户无法连接?

1
2
3
4
5
6
7
8
9
10
# 显示密码验证参数
SHOW VARIABLES LIKE 'validate_password%';
# 设置密码强度检查等级,0/LOW、1/MEDIUM、2/STRONG
SET GLOBAL validate_password.policy = 0;

# 允许外网用户连接
update user set host='%' where user ='root';

# 使用旧版的密码加密规则
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';

安装过程参考另一篇。

win下安全模式重置

首先也是先停掉服务:net stop mysql
然后cd进入mysql的安装目录下的bin目录执行:mysqld.exe --skip-grant-tables
然后再打开一个命令行,登陆mysql,这时候密码是空了接着重设密码:

1
2
3
4
5
mysql> use mysql;
mysql> update user set password=PASSWORD("mynewpassword") where User='root';
# 在mysql5.7以上可能没有password这个字段了新名字叫 authentication_string;所以是下面的语句
# update user set authentication_string=PASSWORD("mynewpassword") where User='root';
mysql> flush privileges;

然后进任务管理器结束所有mysql的服务进程,再打开下mysql服务即可

其他方案

在Ubuntu和Debian系统上,有一个debian-sys-maint用户,Debian类系统下一些系统脚本对mysql的操作是通过这个用户完成的。所以我们可以通过这个用户来修改 root 密码。该用户的密码可以在/etc/mysql/debian.cnf下找到
登陆后执行sudo mysql -u debian-sys-maint -p重置即可

喜欢就请我吃包辣条吧!

评论框加载失败,无法访问 Disqus

你可能需要魔法上网~~