mac上mysql root 密码忘记或权限错误的解决办法

本文介绍了一种在Mantis中遇到MySQL连接错误后的解决方法,包括通过mysqlworkbench进行可视化操作来修改root权限及密码,以及如何通过命令行方式禁用验证功能并重新配置权限。

这几天在折腾mantis发现总是连接mysql出错,就随手改了root权限,导致登录不上。

以下是还原root权限和更改root密码的最便捷方法。

1:装mysql workbench 。可视化界面直接操作。

2:苹果->系统偏好设置->最下边点mysql 在弹出页面中 关闭mysql服务

3:进入终端

输入:

cd /usr/local/mysql/bin/

回车后 登录管理员权限

sudo su

回车后输入以下命令来禁止mysql验证功能

 ./mysqld_safe --skip-grant-tables &

回车后mysql会自动重启,重启好了之后进入mysql workbench 随便创建一个连接,然后用户名填root (注意这里不会验证密码,所以填只要存在的账户就可以)。

再创建一个server administration,选择刚创建的连接。

双击server administration

左侧点击security,右侧就可以看到所有用户权限表了,这个时候想怎么干都行了偷笑


以下是部分说明:

用户权限表中

Limit Connectivity to Hosts Matching 表示登录地址限制,就是登录时候的ip地址 ,‘%’代表任意

Adminstrative Roles是权限,如果发现你的root没有管理员权限了,就点这个选项卡全部勾选


以下是其他命令

./mysqladmin -u root -p password 123             //更改root用户密码

./mysql -uroot -p                 //root用户登录mysql

以下是常见错误

ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 

说明你的root权限不够,就可以参考上面的步骤设置权限

Access denied; you need (at least one of) the SUPER privilege(s) for this operation

说明你的root权限不够,就可以参考上面的步骤设置权限


至此我的数据库终于被找回了~~


<think> 我们正在处理MySQL 5.7忘记root密码的问题。根据引用内容,我们可以总结出以下步骤: 注意:MySQL 5.7版本中,`user`表已经去除了`password`字段,改用`authentication_string`字段来存储密码。 步骤概述: 1. 停止MySQL服务(不同系统方法不同) 2. 以跳过权限表的方式启动MySQL(无密码验证) 3. 使用SQL语句更新root密码(注意字段名) 4. 刷新权限 5. 重启MySQL服务 具体步骤: 步骤1:停止MySQL服务 - 在Mac上,可以通过“系统偏好设置”停止,者使用命令: sudo /usr/local/mysql/support-files/mysql.server stop - 在Linux上,可以使用: sudo systemctl stop mysqld sudo service mysql stop 步骤2:以安全模式(跳过权限表)启动MySQL - 进入MySQL的bin目录(根据安装位置可能不同): cd /usr/local/mysql/bin - 执行: sudo ./mysqld_safe --skip-grant-tables & 注意:如果出现“command not found”,可能需要使用绝对路径,者确保该目录在系统PATH中。 步骤3:更新root密码 - 新开一个终端窗口,无需密码登录MySQLmysql -u root - 在MySQL命令行中执行以下语句(注意:MySQL 5.7中,密码字段为authentication_string): UPDATE mysql.user SET authentication_string=PASSWORD('你的新密码') WHERE User='root'; FLUSH PRIVILEGES; exit; 注意:在MySQL 5.7.6及以上版本,`PASSWORD()`函数已被弃用,可以使用以下语句: ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码'; 步骤4:重启MySQL服务 - 首先,停止之前以安全模式启动的MySQL(可以通过杀死进程的方式,者使用服务停止命令) - 然后正常启动MySQL服务。 步骤5:使用新密码登录 mysql -u root -p 注意:如果修改密码后登录时提示密码过期,则需要再次登录(使用新密码)并设置新密码: ALTER USER 'root'@'localhost' IDENTIFIED BY '更新的密码'; FLUSH PRIVILEGES; 但是,根据引用[3]和[4],在MySQL 5.7中,我们也可以使用`ALTER USER`语句来修改密码,这种方法可能更直接。 因此,在跳过权限表启动后,我们也可以这样修改密码(推荐): FLUSH PRIVILEGES; ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass'; FLUSH PRIVILEGES; 为什么需要执行两次`FLUSH PRIVILEGES`?实际上,在跳过权限表启动后,第一次FLUSH是为了让权限表重新加载(尽管我们跳过了权限表,但当我们执行修改权限的操作时,最好先刷新),然后执行ALTER USER,之后再刷新一次确保修改生效。 然而,通常在执行ALTER USER之前,我们可能不需要刷新,因为跳过权限表的情况下,权限表没有被加载。但为了确保安全,刷新一下也无妨。 另外,如果遇到authentication_string字段修改后还是无法登录,可能是由于密码策略问题,可以尝试设置一个复杂密码。 总结步骤(通用版): 1. 停止MySQL服务。 2. 使用`--skip-grant-tables`选项启动MySQL服务。 3. 连接到MySQL服务器(无需密码)。 4. 执行以下命令之一: UPDATE mysql.user SET authentication_string=PASSWORD('newpassword') WHERE User='root' AND Host='localhost'; 者(推荐) ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword'; 5. 执行`FLUSH PRIVILEGES;`(如果使用UPDATE语句则必须执行,ALTER USER则不一定需要,但执行也无妨)。 6. 退出MySQL,然后停止MySQL服务(者杀死进程),再以正常方式启动MySQL服务。 注意:在MySQL 5.7.5及以下版本,可以使用PASSWORD函数,但更高版本已经移除了该函数,因此使用ALTER USER是更通用的方法。 如果在执行UPDATEALTER USER时遇到错误,请检查是否选择了正确的数据库(use mysql;)。 另外,如果使用ALTER USER语句修改密码,可以避免直接操作user表,更安全。 由于用户提到是MySQL 5.7,所以以上方法适用。 现在,我们将按照步骤写出详细的解决方法。 </think> ### MySQL 5.7 忘记 root 密码的解决方法 以下是完整解决方案,**适用于 macOS/Linux 系统**,按步骤操作即可恢复 root 访问权限: --- #### 1. 停止 MySQL 服务 ```bash # macOS sudo /usr/local/mysql/support-files/mysql.server stop # Linux (systemd) sudo systemctl stop mysqld ``` --- #### 2. 以安全模式启动 MySQL(跳过权限验证) ```bash cd /usr/local/mysql/bin sudo ./mysqld_safe --skip-grant-tables --skip-networking & ``` > 注意:如果出现 `command not found`,请使用[路径修复方法](#)[^1] --- #### 3. 无密码登录 MySQL ```bash # 新开终端窗口执行 mysql -u root ``` --- #### 4. 重置 root 密码(关键步骤) ```sql /* 清空旧密码 */ UPDATE mysql.user SET authentication_string = '', password_expired = 'N' WHERE user = 'root'; /* 刷新权限 */ FLUSH PRIVILEGES; /* 退出 */ EXIT; ``` --- #### 5. 重启 MySQL 并设置新密码 ```bash # 终止安全模式进程 sudo killall mysqld # 正常启动服务 sudo /usr/local/mysql/support-files/mysql.server start # 免密登录设置新密码 mysql -u root ``` ```sql ALTER USER 'root'@'localhost' IDENTIFIED BY '您的新密码'; FLUSH PRIVILEGES; ``` --- #### 验证登录 ```bash mysql -u root -p # 输入新密码 ``` --- ### 常见问题处理 | 问题现象 | 解决方案 | |---------|----------| | `--skip-grant-tables` 启动失败 | 检查 `mysqld_safe` 路径[^1] | | `authentication_string` 修改无效 | 先清空密码再重置[^4] | | 登录提示密码过期 | 执行 `SET PASSWORD` 时添加 `PASSWORD EXPIRE NEVER` | | 忘记刷新权限 | 必须执行 `FLUSH PRIVILEGES`[^2] | ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值