当忘记 MySQL root 密码时,需要通过 “跳过权限验证” 的方式临时启动 MySQL,再重置密码,具体步骤如下(针对你的 MySQL 8.0.39 版本):
步骤 1:停止正在运行的 MySQL 服务
首先确保 MySQL 服务已完全停止,避免进程占用文件:
- # 若用systemd服务(之前创建的mysql.service)
- sudo systemctl stop mysql
- # 若用mysql.server脚本(在support-files目录)
- cd /usr/local/mysql/support-files/
- sudo ./mysql.server stop
- # 若以上命令无效,直接强制终止进程(确保是MySQL进程)
- sudo pkill mysqld
复制代码 步骤 2:以 “跳过权限验证” 模式启动 MySQL
这一步会让 MySQL 暂时不验证用户密码,允许无密码登录:
- # 进入MySQL的bin目录
- cd /usr/local/mysql/bin/
- # 跳过权限表启动(&表示后台运行,--user=mysql指定运行用户)
- sudo ./mysqld --skip-grant-tables --user=mysql &
复制代码 执行后,MySQL 会在后台启动,此时不需要密码即可登录。
步骤 3:无密码登录 MySQL
新开一个终端窗口(或保持当前窗口,直接执行),登录 root 用户:
- # 无密码登录(-u root 后面不加-p,直接回车)
- ./mysql -u root
复制代码 成功登录后,会进入 MySQL 命令行(提示符为mysql>)。
步骤 4:刷新权限并重置密码
在 MySQL 命令行中执行以下命令(关键步骤,8.0 + 版本必须先刷新权限):
sql
- -- 加载权限表(否则无法修改密码)
- FLUSH PRIVILEGES;
- -- 修改root本地登录密码(替换'新密码'为你的密码,需包含大小写、数字、特殊字符)
- ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
- #出现Query OK, 0 rows affected (0.36 sec),表示修改成功。
- -- 若需要允许root远程登录(谨慎开启,生产环境不建议),同时修改远程用户密码
- ALTER USER 'root'@'%' IDENTIFIED BY '新密码'; # 若不存在'root'@'%',可先忽略
- -- 再次刷新权限,确保修改生效
- FLUSH PRIVILEGES;
- -- 退出MySQL
- exit;
复制代码 步骤 5:重启 MySQL 服务(恢复正常模式)
先终止之前 “跳过权限验证” 的临时进程:
用正常方式启动 MySQL:
- # 若用systemd服务
- sudo systemctl start mysql
- # 若用mysql.server脚本
- cd /usr/local/mysql/support-files/
- sudo ./mysql.server start
复制代码 步骤 6:验证新密码
用新密码登录,确认修改成功:
- # 进入bin目录(或已配置环境变量)
- cd /usr/local/mysql/bin/
- ./mysql -u root -p
复制代码 输入新密码,能成功进入 MySQL 命令行即表示密码重置完成。
|