MySQL密码忘记解决办法

326 阅读2分钟

1:密码忘记

设置skip-grant-tables跳过登录

[mysqld]

skip-grant-tables

skip-grant-tables 是 MySQL 数据库服务器的一个启动选项,允许用户在没有权限检查的情况下连接到 MySQL 服务器。这通常用于在忘记 root 密码或权限系统出现问题时恢复对数据库的访问。然而,使用 skip-grant-tables 选项启动 MySQL 服务器会大大增加安全风险,因为它允许任何用户无需密码即可访问数据库。

设置完重启

重置密码

FLUSH PRIVILEGES;  
ALTER USER 'root'@'localhost' IDENTIFIED BY 'new_password';
FLUSH PRIVILEGES; 

然后删掉配置文件中的skip-grant-tables,重新启动mysql

2:主机权限 设置错误导致任何人都连接不上

同样是在skip-grant-tables权限下

方式1:直接修改

进入到数据库

mysql -uroot

修改权限

#看当前所有数据库:
show databases;
#进入mysq数据库:
use mysql;
#查看mysql数据库中所有的表:
show tables;
#查看user表中的数据:
select Host, User,Password from user;
#修改user表中的Host:  % 代表任意的客户端,可替换成具体IP地址。
update user set Host='%' where User='root';  
#最后刷新一下:
flush privileges;

方式2:创建新用户

#创建用户
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

在上述命令中,‘username’是您要创建的用户名,‘localhost’表示该用户只能从本地主机连接。如果您希望允许远程连接,请将’localhost’替换为’%’,表示该用户可以从任何主机连接到器。

#赋予所有权限
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';

上述命令将授予该用户对所有和所有表的所有权限。如果您只想授予用户对特定数据库的权限,将*.*替换为database_name.*,其中database_name是您要授予权限的数据库名。

最后,运行以下命令以使更改生效:

#创建用户
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
#赋予所有权限
GRANT ALL PRIVILEGES ON *.* TO 'username'@'localhost';
#刷新
FLUSH PRIVILEGES;

然后删掉配置文件中的skip-grant-tables,重新启动mysql.登录新创建的用户重新设置权限