给测试库改密码,执行 update mysql.user set password=password('123456'),MySQL 8.0 直接报错:Unknown column 'password' in 'field list'。版本一换,老语句就废了。mysql修改密码要按版本选命令,别照抄五年前的博客。
MySQL 8.0 用 ALTER USER
登录后执行 ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';,立即生效,不用再 flush privileges。密码策略要求大小写、数字、符号都带,太简单会报 1819 Your password does not satisfy the current policy requirements。可以先 show variables like 'validate_password%' 看当前要求,再决定密码怎么设。生产库不建议为了省事关掉策略。
MySQL 5.7 及更早版本的写法
5.7 可以用 SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码');,或者 update mysql.user 之后执行 FLUSH PRIVILEGES。从 5.7 后期版本起,user 表的 password 字段就换成了 authentication_string,8.0 里 PASSWORD() 函数也被移除,所以别再混用。命令行里用 mysqladmin -u root -p password 也能改,会先提示输入旧密码,适合脚本里调用。
改完连不上,先查这三个地方
一是用户名和主机部分要匹配,localhost 和 % 是两条不同记录,改了前者用 IP 连还是旧密码。二是应用程序的连接池还拿着旧密码,重启服务或者改配置文件,不然报 Access denied for user。三是密码里有特殊字符,配置文件里的引号没处理好,建议先用字母数字组合试通再换复杂密码。
mysql修改密码的顺序建议是:先备份 mysql 库,按版本执行对应语句,改完用新密码重新登录一次确认。云数据库一般走控制台的重置入口,别在实例里直接改系统表。