前段时间部署测试服务器,折腾半天搞懂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账号,远程登录的%账号密码依旧是旧的,这是很常见的人为疏漏。
改密码不用追求复杂,测试环境简洁够用就行,生产环境只要避开简单纯数字密码,满足数据库基础密码规则就可以。
重置完密码的当晚,直接关掉了所有杂乱的教程网页,只留存了两个版本的原生修改语句。