--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助手,依托大模型,帮助用户记录、整理和分析音视频内容,体验用大模型做音视频笔记、整理会议记录。
相关推荐
2401_871696522 小时前
c++如何实现简单的文件签名验证_HMAC-SHA1算法应用【进阶】qq_334563552 小时前
如何清除SQL表中的缓存垃圾_通过TRUNCATE重置表状态baidu_340998822 小时前
如何配置Oracle 19c CDB资源管理_PDB级别的CPU与内存限制2301_815279522 小时前
C#怎么实现WPF MVVM框架 C#如何用CommunityToolkit.Mvvm快速搭建WPF MVVM项目【框架】Polar__Star2 小时前
golang如何实现验证码图片生成_golang验证码图片生成实现实战21439652 小时前
HTML函数开发用防眩光屏幕更舒适吗_显示面板类型选择【指南】HalvmånEver2 小时前
MySQL数据库表(table)操作2401_871696522 小时前
Golang Redis Pipeline如何用_Golang Redis Pipeline教程【完整】