前段时间部署测试服务器,折腾半天搞懂mysql怎么修改密码,踩了好几个版本适配的坑,每一次报错都对应一个真实的操作误区。

最开始完全没注意MySQL版本差异,拿着网上通用的旧语句直接执行,结果终端一直抛语法错误,明明步骤看着一模一样,就是无法生效,白白浪费了半个多小时。

mysql怎么修改密码(已知旧密码常规修改)

后续实操才分清,MySQL5.7和8.0版本的修改语句不能通用,混用百分百报错,这也是大多数人修改失败的核心原因。日常登录数据库、记得原有密码的情况下,直接对应版本执行语句就行,操作简单且成功率最高。

5.7版本可以用SETPASSWORD语句,格式是SETPASSWORDFOR'root'@'localhost'=PASSWORD('新密码');,输入后刷新权限就能生效,适配绝大多数旧项目服务器。我之前一台老旧的业务服务器就是5.7版本,用这个语句一次就修改成功,没有任何多余问题。

8.0及以上新版本彻底废弃了PASSWORD()加密函数,这也是很多人报错的关键。官方文档明确标注,8.0版本统一使用ALTERUSER语句修改密码,标准格式为ALTERUSER'root'@'localhost'IDENTIFIEDBY'新密码';,执行完毕后输入FLUSHPRIVILEGES;刷新权限,密码就会即时更新。

一定要注意账号后缀,localhost和%是完全不同的,localhost仅支持本地登录,%允许远程登录,修改错后缀的话,改完密码依旧无法正常登录数据库。

mysql怎么修改密码(忘记密码强制重置)

真正棘手的是完全忘记旧密码的情况,常规修改语句完全用不了,只能通过跳过权限验证的方式重置,这个流程我踩过最致命的坑。

之前图省事,直接网上复制跳过权限的命令,结果重启服务后数据库直接无法启动,排查半天才发现是命令参数写错,还误改了系统配置文件,折腾很久才搞明白正确的操作逻辑。

  • 先停止MySQL服务,Windows在服务面板关闭,Linux执行systemctlstopmysqld
  • 用跳过权限命令启动服务:mysqld--skip-grant-tables
  • 新开终端无密码登录mysql,执行对应版本修改语句
  • 关闭临时进程,重启MySQL正式服务

这里有个很容易忽略的细节,8.0版本跳过权限登录后,必须先执行flushprivileges;刷新权限,才能执行ALTERUSER修改密码,否则会提示权限不足,无法修改,我上次就是卡在这一步反复报错。

很多人重置密码后,会出现远程连接失败的问题,其实不是密码没改成功,是修改时只改了localhost账号,远程登录的%账号密码依旧是旧的,这是很常见的人为疏漏。

改密码不用追求复杂,测试环境简洁够用就行,生产环境只要避开简单纯数字密码,满足数据库基础密码规则就可以。

重置完密码的当晚,直接关掉了所有杂乱的教程网页,只留存了两个版本的原生修改语句。