MySQL 5.7+ 必须用 ALTER USER 修改密码,因 password 字段已废弃,authentication_string 需由 ALTER USER 自动处理哈希与插件适配;手动更新无效或引发连接失败。

能找回,但必须分清 MySQL 版本和启动方式,否则改了也白改——UPDATE user SET password=... 在 5.7+ 里不报错但完全无效,8.0+ 甚至会提示 PASSWORD() is deprecated。
MySQL 5.7+ 必须用 ALTER USER,别碰 authentication_string 手动赋值
5.7 开始废弃 password 字段,改用 authentication_string 存哈希值;但直接 SET authentication_string = 'xxx' 风险高:哈希格式错、插件不匹配、客户端连不上。官方路径是走 ALTER USER 语句,它自动处理格式与插件适配。
- 登录后执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; - 如果连接工具报
Client does not support authentication protocol,说明认证插件不兼容,立刻补一句:ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码'; - 别手动算哈希值粘贴进
authentication_string字段——容易大小写/符号错位,且绕过插件校验逻辑
Linux 下用 mysqld_safe --skip-grant-tables & 最稳,别信 systemctl start mysqld --skip-grant-tables
systemctl 不支持透传 --skip-grant-tables 参数,硬加会失败或静默忽略。真正起作用的是 mysqld_safe 这个官方 wrapper,它能正确加载配置、管理 pid、重定向日志。
将 WCAG 2 AA 无障碍标准应用于设计系统、UI 组件和网页——通过可运行的验证器进行对比度计算,采用设计 token 模式使颜色天生可访问,设定排版和焦点状态规则,并提供语义检查清单。适用于构建或审查 UI。
- 先停服务:
sudo systemctl stop mysqld(或mysql,看实际服务名) - 后台启动:
sudo mysqld_safe --skip-grant-tables & - 等几秒,检查是否真跑起来:
sudo tail -n 20 /var/log/mysqld.log,看到mysqld: ready for connections才算成功 - 另开终端连库:
mysql -u root(不加-p,密码直接回车)
Windows 下改 my.ini 比命令行可靠,改完必须删掉 skip-grant-tables
Windows 没有 mysqld_safe,直接运行 mysqld --skip-grant-tables 容易被服务管理器拦截或卡在控制台。最稳妥的是改配置文件,但很多人重启后仍连不上——因为忘了删掉 skip-grant-tables 这行。
- 找到
my.ini(常见路径:C:\ProgramData\MySQL\MySQL Server X.X\my.ini或安装目录下) - 在
[mysqld]段落末尾加一行:skip-grant-tables - 管理员身份运行:
net stop mysql→net start mysql - 连库修改密码后,**必须删掉
my.ini里的skip-grant-tables行,再重启服务**,否则数据库永远无权限控制
最容易被忽略的点:MySQL 8.0+ 默认用 caching_sha2_password 插件,但很多老客户端(如 Navicat 旧版、某些 Python 驱动)不支持。重置完密码,第一件事不是测试 SQL,而是用 SELECT user, host, plugin FROM mysql.user WHERE user='root'; 看插件名,不对就立刻切回 mysql_native_password——否则你会以为密码又错了。










