mysql忘记root密码如何找回_通过skip-grant-tables重置密码

--skip-grant-tables 无效主因是未被 mysqld 实际加载,需通过 ps aux 确认启动命令;MySQL 8.0+ 必须用 ALTER USER 配合 FLUSH PRIVILEGES 修改密码,且需指定 mysql_native_password 插件避免认证失败。mysqld 启动时加 --skip-grant-tables 为什么没用常见现象是:改完配置、重启服务,mysql -u root 还是报 Access denied,或者压根连不上。根本原因通常是 mysqld 没真正用上这个参数------要么被 systemd 服务文件覆盖,要么被 my.cnf 里其他配置干扰。实操建议:先确认 mysqld 实际启动命令:ps aux | grep mysqld,看输出里有没有 --skip-grant-tables不要直接改 /etc/my.cnf 加 skip-grant-tables,它在较新 MySQL(8.0+)中已被弃用,改了也无效;必须通过命令行参数传入systemd 环境下,得临时覆盖服务配置:sudo systemctl edit mysql,新增 Service 段并写 ExecStart= 完整路径 + --skip-grant-tables --skip-networking--skip-networking 必须同时加,否则远程连接可能绕过权限检查,造成安全风险MySQL 8.0+ 重置 root 密码时 UPDATE user SET authentication_string=... 报错错误信息通常是:ERROR 1054 (42S22): Unknown column 'password' in 'field list' 或 ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement。前者是因为字段名变了,后者是因为你忘了先 FLUSH PRIVILEGES。实操建议:MySQL 5.7 用 password 字段,8.0+ 改成 authentication_string,且必须用 ALTER USER,不能直接 UPDATE进入后第一件事不是改密码,而是执行 FLUSH PRIVILEGES,否则权限系统没加载,所有 DML 都被拒绝正确操作顺序:FLUSH PRIVILEGES; → ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass';如果提示 'root'@'localhost' 不存在,查 SELECT User,Host FROM mysql.user;,有些安装默认是 'root'@'127.0.0.1' 或 'root'@'%'重置完密码重启 mysqld,mysql -u root -p 仍连不上典型表现:输对密码也报 Access denied for user 'root'@'localhost'。问题往往出在认证插件不匹配,尤其是从旧版本升级或 Docker 镜像部署的实例。 通义听悟 阿里云通义听悟是聚焦音视频内容的工作学习AI助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。

相关推荐
风之所往_9 分钟前
Python 3.4 新特性全面总结
python
EntyIU38 分钟前
JVM内存与GC笔记
java·jvm·笔记
太阳上的雨天1 小时前
任何格式的文件转Markdown
python·ai
提笔了无痕1 小时前
RAG存储策略中.md格式的切片与存储怎么处理
数据库·ai·rag
yaoxin5211231 小时前
419. 现代 Java IO 最佳实践 - 写入文本文件
java·windows·python
陳土1 小时前
DuckDB精读——基于Getting started with DuckDB
数据库·oracle
雪宫街道1 小时前
synchronized 锁的范围:对象锁、类锁与代码块锁
java·jvm·后端·面试
weixin_468466851 小时前
纳米 AI 搜索新手极速上手指南
人工智能·python·深度学习·搜索引擎·ai·语言模型·自然语言处理
凯瑟琳.奥古斯特2 小时前
数据库原理选择题精选
数据库·python·职场和发展