我们在安装使用MySQl 时,有时可能避免不了忘记密码,如果你忘记密码,可以按照如下方案进行操作:
我使用的MySQL版本:MySQL5.7.34
1、关闭mysql服务
查看MySQL进程,pkill -9 mysqld 先杀死进程
查看一下端口是否存在,不存在则进行下面操作。
2、修改my.cnf文件配置
找到my.cnf配置文件
[root@mysql mysql]# vim /etc/my.cnf
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
skip-grant-tables 加上这一行(跳过授权表)
之所以有用户名有密码就是因为有授权表的存在,它的表里面记录了用户名和密码。有账户去登录MySQL数据库的时候它先去查看那张表,现在就直接跳过去,不看了,直接就登录了。
3、重启mysql服务
[root@mysql mysql]# bin/mysqld_safe --user=mysql &
4、无密码登录mysql进行操作
[root@mysql mysql]# bin/mysql 拿客户端去连mysql会发现直接就进去了不需要输入用户名密码
5、MySQL客户端连接服务器并修改密码
[root@mysql ~]# /usr/local/mysql/bin/mysql
拿客户端去连MySQL会发现直接就进去了不需要输入用户名密码
mysql> select user,host,authentication_string from mysql.user;
user的表在mysql数据库里面,这是一个查询不是修改,查到之后去把 authentication_string认证字符串修改一下用password函数修改一下,里面就是新密码。
红框部分是认证字符串,目前是处于加密状态,
mysql> update mysql.user set authentication_string=password('Helloworld456!') where user='root';
给root账户修改,这个root账户是mysql里面的root账户和系统里面的root账户完全不搭边,是mysql最高级的账户,跟系统里面roo账户的级别是一样的。
现在密码已经被改掉了,想要立即生效就执行下面操作。
mysql> flush privileges; 这个是刷新一下上面的用户授权表,其实就是让它立即生效。
mysql> exit 退出
6、使用新密码进行登录
[root@mysql mysql]# bin/mysql -u root -p'Helloworld456!'
退出之后再次重启mysql,因为之前的mysql用的skip-grant-tables 跳过授权表了,不能让它一直有这个配置,不然每次一重启就不用密码了,太危险。所以得把这个配置取消掉,然后在重启服务,再以正常的方法登录。
新版本不MySQL重启服务,新密码也会直接生效,本机测试版本为5.7.34
7、重启MySQL服务
[root@mysql mysql]# pkill -9 mysqld
[root@mysql mysql]# bin/mysqld_safe --user=mysql & 启动MySQL服务
重启MySQL服务会发现,使用bin/mysql不需要密码直接就登录到MySQL了,这样太危险
8、修改my.cnf配置文件
[root@mysql mysql]# pkill -9 mysqld 停止MySQL服务
[root@mysql mysql]# vi /etc/my.cnf 在这个配置文件中,把跳过授权表这一行删掉,不要注释,删完之后重新启动MySQL服务,重新登录MySQL服务,没有密码就进不去
9、重启并登录MySQL
[root@mysql mysql]# bin/mysqld_safe --user=mysql & 重新启动MySQL服务
[root@mysql mysql]# bin/mysql 这时无密码登录MySQL,会提示需要输入密码
10、使用新密码登录
[root@mysql mysql]# bin/mysql -u root -p'Helloworld456!'
MySQL修改密码成功。
【注意】请不要因为没有掌声就放弃梦想。