本教程基于你有权限修改MySQL配置文件的前提,可以在忘记密码后通过通过密码验证的方式登录,登录成功后修改密码,最后在禁用跳过密码登录。
系统环境为CentOS7
、Mysql5.7
,基于该环境测试总结。
会因不同版本的Linux和MySQL,而造成命令语句、SQL语句不同,欢迎评论沟通交流。
0. 切换root
登录CentOS7。
因为该操作对安全要求较高,需要切换到root用户下操作。
su root
输入密码回车,输入密码的时候没有提示,输入成功即可切换到root用户。结果:
[root@localhost ~]#
能看到最左边的root
说明已经切换用户成功。
1. 修改配置跳过密码校验
打开MySQL配置文件my.cnf
,
vi /etc/my.cnf
按字符i
,进入编辑模式,在[mysqld]
下面加上,
skip-grant-tables
修改后(参考)效果如下:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
skip-grant-tables
按Esc
进入命令行模式,英文状态下输入下述指令完成保存退出。
:wq
2. 重启MySQL
重启MySQL,使配置保存生效。
service mysqld restart
3. 免密登录修改密码
3.1 免密登录
等MySQL服务重新启动后,就可以不使用密码登录MySQL。
mysql -u root -p
也可以输入mysql -u root
或mysql
,效果与上述命令一下,因为不需要输入密码。
回车后提示输入密码,
[root@localhost xxxx]# mysql -u root -p
Enter password:
不用理会直接回车即可直接成功登录MySQL。
Server version: 5.7.27 MySQL Community Server (GPL)
Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
注意:这个时候MySQL已关闭各项权限的验证,可以免密登录等各种操作,不安全。建议尽快按照如下步骤修改密码后取消免密登录。
3.2 修改密码
使用如下命令之一修改密码:
update user set authentication_string=password('新密码') where user='root' and Host = 'localhost';
结果:
mysql> update mysql.user set authentication_string=password('newpassword') where user='root' and Host = 'localhost';
Query OK, 1 row affected, 1 warning (0.01 sec)
注意:
因为
MySQL5.7
的密码字段是authentication_string,所以上述语句这样写。
如果是MySQL5.5
的版本,修改密码的语句如下(未验证)
update user set password=password("新密码") where user="root";在
MySQL
自带的客户端上输入命令必须以;
结尾,否则无法执行,忘记了直接再敲一个;
回车即可。- 如果想设置简单密码(或者设置密码过程中报错1189),可以尝试执行下面两个SQL后再运行设置密码的SQL语句
set global validate_password_policy=0;
set global validate_password_length=1;
3.3 刷新权限
修改密码之后,需要刷新权限。
flush privileges;
结果:
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
注意:在
MySQL
自带的客户端上输入命令必须以;
结尾,否则无法执行,忘记了直接再敲一个;
回车即可。
4. 重启MySQL 验证密码
4.1 重启
Ctrl + D
或者exit + 回车
退出MySQL。
4.2 还原配置文件
按照步骤1中方式,修改MySQL配置文件,还原配置内容。
这里建议将skip-grant-tables
这行注释掉,而非删除,原因大家都懂得[坏笑...]。效果如下:
[mysqld]
character-set-server=utf8
collation-server=utf8_general_ci
#skip-grant-tables
4.3 重启MySQL使配置生效
重启MySQL,使配置保存生效。
systemctl restart mysqld
4.4 使用新密码登录
等MySQL服务重新启动后,使用新密码登录MySQL。
mysql -u root -p
回车后输入密码,看到了熟悉的界面,恭喜!!!
版权属于:Vsunks.V
本文链接:http://blog.sunxiaowei.net/db/207.html
转载时须注明出处及本声明
如果修改报错,先刷新权限,就可以了OωO
赞