方法一
1.添加登录跳过权限检查配置
修改 /etc/my.cnf
文件,在 [mysqld] 配置节点添加 skip-grant-tables
配置
[mysqld]
skip-grant-tables
2.重新启动mysql服务
service mysqld restart
3.修改密码
添加登录跳过权限检查配置后,在终端用 mysql 命令登录时不需要用户密码,然后选择三种修改密码的方式中的任意一种修改密码即可。
注意:mysql
库的 user
表,MySQL 5.7 以下版本密码字段为 password
,MySQL 5.7 以上版本密码字段为 authentication_string
。
4.还原登录权限跳过检查配置
将 /etc/my.cnf
中 [mysqld]
节点的 skip-grant-tables
配置删除,然后重新启动服务即可。
特别注意:MySQL的配置文件/etc/my.cnf中配置skip-grant-tables,会导致无法远程登录数据库,所以修改好密码之后,必须将skip-grant-tables注释掉。
方法二
停止数据库服务:
[root@htlwk0001host ~]# systemctl stop mysqld.service
进入到 MySQL 的 bin 目录下:
cd /usr/local/mysql/bin/
切换成 root 用户身份:
sudo su
切换成功后输入以下命令来禁止 MySQL 验证功能:
./mysqld_safe --skip-grant-tables &
回车后 MySQL 会自动重启,那么在当前会话中可以无需密码登录 MySQL。
然后选择三种修改密码的方式中的任意一种修改密码即可。
我的操作系统是:CentOS Linux release 8.2.2004 (Core) ,MySQL版本是:mysql Ver 8.0.26 for Linux on x86_64 (Source distribution),MySQL命令目录是:/usr/bin/,在该目录下没有指令mysqld_safe。
方法三
先停止数据库服务:
[root@htlwk0001host ~]# systemctl stop mysqld.service
接着以“无需验证”方式启动数据库服务:
[root@htlwk0001host ~]# mysqld --skip-grant-tables
然后再打开另一个会话窗口,直接输入 mysql 就可以登录了:
[root@htlwk0001host ~]# mysql
然后选择三种修改密码的方式中的任意一种修改密码即可。
修改完密码之后,要关闭 mysqld 进程,macOS 就打开活动监视器,Windows 就打开任务管理器,将 mysqld 进程关闭,再重新以正常方式启动数据库服务,输入账号和密码登录数据库。