能解决,但必须有服务器本地操作权限;MySQL 8.0+ 必须用 ALTER USER 修改密码,需注意插件兼容性、FLUSH PRIVILEGES 生效、Windows 下 --defaults-file 和 --shared-memory 必选,--skip-networking 是安全刚需,重置后需检查 host 和 plugin。

能解决,但必须有服务器本地操作权限。没有 root 或管理员权限,所有方法都无效。
MySQL 8.0+ 必须用 ALTER USER,不能用 UPDATE mysql.user
MySQL 8.0 默认使用 caching_sha2_password 插件,authentication_string 字段是 SHA256 哈希值,直接 UPDATE 赋值旧式 PASSWORD() 结果会导致登录失败。
- 正确写法:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; - 如果客户端不支持新插件(比如老版本 MySQL Workbench 或命令行工具),改用:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; -
FLUSH PRIVILEGES;必须执行,否则修改不生效
Windows 下 mysqld --skip-grant-tables 必须带 --defaults-file
Windows 官方安装版的数据目录默认在 C:\ProgramData\MySQL\MySQL Server X.X\(隐藏目录),不指定配置文件会报错 Can't find message file 或 Failed to open datadir。
- 先确认真实配置路径:
mysql --help | findstr "Default options" - 启动命令必须完整:
mysqld --defaults-file="C:\ProgramData\MySQL\MySQL Server 8.1\my.ini" --skip-grant-tables --shared-memory --console -
--shared-memory是 Windows 必选项,否则mysql -u root连不上
--skip-networking 不是可选,而是安全刚需
启用 --skip-grant-tables 后,任何本地用户都能无密码连接——包括恶意脚本或未授权进程。跳过网络监听能堵住这个窗口期。
- Linux 启动时加:
sudo mysqld --skip-grant-tables --skip-networking & - Windows 启动时加:
--skip-networking(和--shared-memory可共存) - 不要用
skip_grant_tables=1写进my.cnf并长期保留,这是严重安全隐患
重置后连不上?先查 host 和 plugin
执行 SELECT host, user, plugin, authentication_string FROM mysql.user WHERE user = 'root';,常见问题有两个:
-
host是%但不是localhost:Windows/macOS 命令行默认走 socket,只认'root'@'localhost',需补一条:CREATE USER 'root'@'localhost' IDENTIFIED BY '密码'; GRANT ALL ON *.* TO 'root'@'localhost' WITH GRANT OPTION; -
plugin是caching_sha2_password但客户端不兼容:就按上一条改成mysql_native_password
改完记得再跑一遍 FLUSH PRIVILEGES;,别漏掉。


















