当前位置: 首页 > news >正文

Ubuntu 22.04 + MySQL 8 无密码登录问题与 root 密码重置指南

背景场景

在 Ubuntu 系统中使用 aptdeb 包方式安装 MySQL 8 时:

  • 初次安装后会自动初始化数据库;
  • 没有提示 root 初始密码
  • 导致 mysql -u root -p 无法登录。

为了解决该问题,通常我们使用 --skip-grant-tables 方式跳过权限认证进入 MySQL,然后手动修改 root 密码,但这可能导致 权限表异常残留,重启后仍可免密登录


解决方案总览

我们将通过三步彻底修复这个问题:

  1. 启动 MySQL,跳过权限校验,进入无密码模式
  2. 清空 root 用户,重新创建 root 账户并配置密码
  3. 恢复配置文件,重启验证密码登录生效

步骤一:跳过密码验证启动 MySQL

1. 停止 MySQL 服务

sudo systemctl stop mysql

2. 启动 MySQL 并跳过授权验

sudo mysqld_safe --skip-grant-tables --skip-networking &

解释:

  • --skip-grant-tables: 跳过用户认证;
  • --skip-networking: 禁止远程连接(增强安全);
  • &: 后台运行。

3. 无密码登录 MySQL

mysql -u root

进入后会看到 mysql> 提示符。


步骤二:清除旧 root 用户并重新配置密码

1. 刷新权限(激活权限表)

FLUSH PRIVILEGES;

2. 删除所有旧 root 用户

DELETE FROM mysql.user WHERE User = 'root';

3. 创建新的 root 用户(本地登录)

CREATE USER 'root'@'localhost' IDENTIFIED BY 'YourStrongPassword';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' WITH GRANT OPTION;

4. (可选)允许远程登录

CREATE USER 'root'@'%' IDENTIFIED BY 'YourStrongPassword';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;

5. 强制刷新权限

FLUSH PRIVILEGES;

6. 退出 MySQL

exit;

步骤三:恢复安全配置并验证

1. 停止无密码运行的 mysqld_safe

sudo pkill mysqld

2. 检查并删除 my.cnf 中跳过权限的配置项(如有)

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf

确保 [mysqld] 部分中 没有 skip-grant-tables

3. 重启 MySQL

sudo systemctl restart mysql

4. 使用密码登录验证

mysql -u root -p
# 输入上面新设置的密码

常见问题解答

为什么删除了配置后还是免密?

mysql.user 表中旧的 root 用户没有密码,权限系统仍然允许直接登录。

为什么 CREATE USER 失败?

--skip-grant-tables 模式下权限未激活,部分语句需要先执行 FLUSH PRIVILEGES

ALTER USERUPDATE user 不生效?

可能是因为权限表没刷新、字段错误(MySQL 8 使用 authentication_string 字段),或因为之前的 root 用户已经损坏。


总结

步骤关键操作
跳过验证--skip-grant-tables 模式启动
修复 root删除 + 重新创建 + 设置密码
权限生效FLUSH PRIVILEGES 是关键命令
安全恢复移除配置、重启服务、验证密码

该方案适用于无法找到初始密码、root 用户权限损坏等问题,是 MySQL 密码修复最稳妥的方式。


附加建议

  • 修改密码后建议立即执行:
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
  • 建议设置复杂密码,并定期备份 mysql.user 表;
  • 如部署环境建议开启 skip-name-resolve 提升性能。
http://www.lryc.cn/news/579953.html

相关文章:

  • OpenCV中DPM(Deformable Part Model)目标检测类cv::dpm::DPMDetector
  • 前端基础知识Webpack系列 - 03(webpack中常见的Loader?解决了什么问题?)
  • STM32CubeMX教程1 实现点灯点灯
  • 量化开发(系列第3篇): C++在高性能量化交易中的核心应用与技术栈深度解析
  • 三态逻辑详解:单片机GPIO、计算机总线系统举例
  • 【python实用小脚本-128】基于 Python 的 Hacker News 爬虫工具:自动化抓取新闻数据
  • RK-Android11-性能优化-限制App内存上限默认512m
  • 基于Hadoop的公共自行车数据分布式存储和计算平台的设计与实现
  • 如何调节笔记本电脑亮度?其实有很多种方式可以调整亮度
  • Mysql+neo4j创建节点和关系
  • [环境安装] 图数据库Neo4j 2025.05 安装(apple M芯片)
  • XILINX Kintex 7系列FPGA的全局时钟缓冲器(BUFG)和区域时钟缓冲器(BUFR/BUFH)的区别
  • EPLAN 电气制图:建立自己的部件库,添加部件-加SQL Server安装教程(三)上
  • HarmonyOS学习记录3
  • 2025微信小程序wxapkg解包全攻略
  • 怎么下载Eclipse CDT历史版本
  • 深度剖析:如何解决Node.js中mysqld_stmt_execute参数错误
  • 【Maven】Maven命令大全手册:28个核心指令使用场景
  • 教资报名手机裁剪照片工具推荐 | 教师资格证照片在线生成器
  • 技术与情感交织的一生 (九)
  • 微信小程序51~60
  • BTC.D三阶段发展解析:从铭文生态到超级比特币公链
  • [Linux]内核如何对信号进行捕捉
  • 生成式AI版权迷局中的技术破茧之路
  • 7月4日星期五今日早报简报微语报早读
  • 面试150 赎金信
  • Winscope在aosp 13/14/15版本的使用总结
  • uni-app实现单选,多选也能搜索,勾选,选择,回显
  • uniapp 微信小程序水印
  • Vue中对象赋值问题:对象引用被保留,仅部分属性被覆盖