社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  DATABASE

突然忘记 Mysql 登陆密码,怎么办?

IT服务圈儿 • 2 月前 • 140 次点击  
来源丨经授权转自 Java极客技术(ID:Javageektech)

作者丨了不起

一、问题背景

很久之前,在 centos7 服务器上安装了一个 mysql5.7 的数据库,不过很长时间没有使用过,记得里面有一些重要数据,最近想起来可以用起来,但是密码忘记了

此时,就想是否有一种办法,能找回密码或者修改密码的方案。

于是,就在网上找了一些方案,大体用的最多的就是skip-grant-tables解法。

二、解法详解

本例的操作系统是centos7,mysql是5.7的版本,可能不同版本的命令稍有不同,网友可以自行根据系统版本查询相关命令。

2.1、skip-grant-tables模式启动

skip-grant-tables表示,在启动mysql时不启动授权表功能,可以直接免密码登录

#修改/etc/my.cnf文件
vim /etc/my.cnf

#在[mysqld]区域添加配置,并保存my.cnf文件
skip-grant-tables

#重启mysql
systemctl restart mysqld

#登录mysql
mysql -u root -p

#如果出现输入密码,直接回车,就可以进入数据库了

2.2、修改root密码

#登录mysql,此时还没有进入数据库,使用如下命令
use mysql;

#修改root密码(mysql5.7版本)
update user set authentication_string = password('密码'), password_expired = 'N',password_last_changed = now() where user = 'root';

#如果你的mysql是5.6版本修改root密码(mysql5.6版本)
update user set password=password('密码'where user='root';

#使其生效
flush privileges;

#退出
exit;

2.3、新增管理员用户

如果你不想修改root密码,可以新增一个管理员用户,操作如下:

#登录mysql,此时还没有进入数据库,使用如下命令
use mysql;

#刷新数据库
flush privileges;

#创建一个用户,并赋予管理员权限
grant all privileges on *.* to '用户'@'%' identified by '密码';

#例如,创建一个admin用户,密码为admin
grant all privileges on *.* to 'admin'@'%' identified by 'admin';

2.4、重启服务器

上面操作完成之后,其实还没有完,需要关闭授权表功能,重启服务器

#修改/etc/my.cnf文件
vim /etc/my.cnf

#在[mysqld]区域删除改配置,并保存my.cnf文件
#skip-grant-tables

#重启mysql
systemctl restart mysqld

#此时,修改完毕

三、测试连接

使用我们刚刚新建的admin用户进行测试登录

#admin登录
mysql -u admin -p

#输入密码admin,此时可以登录

四、总结

如果您也出现忘记密码的情况,可以使用此方法解决当前问题。

mysql5.7.6版本后,废弃user表中password()方法,所以旧方法重置密码对mysql8.0版本是行不通的!

mysql8可以采用此方法修改root密码:

#在skip-grant-tables模式下,将root密码置空
update user set authentication_string = '' where user = 'root';

#退出,将/etc/my.cnf文件下的skip-grant-tables去掉,重启服务器
#登录mysql
mysql -u root -p

#因为密码置空,直接回车,进入数据库之后,修改密码
ALTER USER 'root'@'localhost' IDENTIFIED BY '123456';

#因为mysql8,使用强校验,所以,如果密码过于简单,会报错,密码尽量搞复杂些!

1、单列模式,7连问,真的扛不住呀,太难了!

2、Python中的 if __name__ == '__main__' 是干嘛的?

3、深圳某小厂后端面试,被拷打了!

4、代码质量堪忧!Win11升级弹窗自己卡死崩溃

5、揭秘:为什么HugePage能让Oracle数据库如虎添翼?

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/178185
 
140 次点击