1 背景介绍
无论您是在企业中做开发的工程师还是在学习中的学生,难免会遇到MySQL的密码未与之前的开发人员交接清楚或自己遗忘了密码的情况。
1.1 系统及软件版本
系统/软件 | 版本 |
---|---|
CentOS | 7.8 64位 |
MySQL | 5.7.34 |
2 操作过程
Tips:
以下所有的操作均以管理员账户或拥有管理员权限的账户执行
先停止mysql服务
systemctl stop mysqld.service
修改mysql的配置文件my.cnf
,达到跳过密码验证权限,通常此文件在/etc/my.cnf或/etc/mysql/my.cnf。
也可以通过命令查找mysql的配置文件路径
[root@hadoop01 ~]# find / -name my.cnf
/etc/my.cnf
/var/lib/docker/overlay2/d718ec72caaeb4f0cd59df2e9c8503d69bddb902fe95b52a1b336e6fbb6f9162/diff/etc/my.cnf
/usr/share/mysql-test/suite/federated/my.cnf
/usr/share/mysql-test/suite/group_replication/my.cnf
/usr/share/mysql-test/suite/ndb/my.cnf
/usr/share/mysql-test/suite/ndb_big/my.cnf
/usr/share/mysql-test/suite/ndb_binlog/my.cnf
/usr/share/mysql-test/suite/ndb_ddl/my.cnf
/usr/share/mysql-test/suite/ndb_memcache/my.cnf
/usr/share/mysql-test/suite/ndb_rpl/my.cnf
/usr/share/mysql-test/suite/ndb_team/my.cnf
/usr/share/mysql-test/suite/ndbcluster/my.cnf
/usr/share/mysql-test/suite/rpl/extension/bhs/my.cnf
/usr/share/mysql-test/suite/rpl/my.cnf
/usr/share/mysql-test/suite/rpl_ndb/my.cnf
您的查询结果会可能会因为环境导致存在与上述结果不同的问题,可以忽略这个事情。从上述结果中看,/etc/my.cnf就是mysql的配置文件。
通过vi或vim打开此配置文件,在[mysqld]
部分下添加内容:
skip-grant-tables
保存并关闭配置文件后,启动mysql服务
# 启动mysql服务
systemctl start mysqld
登录MySQL
由于已经跳过了权限验证,现在可以直接登录MySQL,无需密码。使用以下命令登录:
mysql -u root
登录后可以看到信息如下图
接下来选择数据库,执行命令修改mysql的密码。
-- 选择数据库
use mysql;
-- 修改密码,新密码为Root!234
UPDATE user SET authentication_string = PASSWORD('Root!234') WHERE User = 'root';
不同版本的MySQL的密码字段可能不同,可以通过desc mysql
命令来查看字段结果。或通过select
语句查看字段,如有返回值则表示mysql中使用的是与文档中相同字段,
SELECT User,authentication_string from user;
如果不是authentication_string
字段,上面的sql执行后不会出现类似下图中的结果。
执行以下命令以确保所有权限更改生效,并退出MySQL shell。
FLUSH PRIVILEGES;
EXIT;
打开my.cnf
文件,将skip-grant-tables
删除。然后重启mysql服务
systemctl restart mysqld
使用新的密码登录
mysql -u root -p'Root!234'
结果如下图