mysql 5.7 安装后临时密码需从错误日志中查找:centos/rhel 执行 sudo grep 'temporary password' /var/log/mysqld.log,ubuntu/debian 查 /var/log/mysql/error.log,windows 在 data 目录下主机名.err 文件中搜索;获取后用 mysql -u root -p 登录,立即执行 alter user 'root'@'localhost' identified by '新密码'; 修改,密码须满足复杂度要求,否则报 error 1819。

必须先用临时密码登录,再用 ALTER USER 强制修改,否则会卡在 ERROR 1820(“必须重置密码”)。
怎么找到 MySQL 5.7 安装后生成的临时密码
安装完成首次启动时,MySQL 会自动生成一个一次性 root 密码,写入错误日志。路径取决于系统和安装方式:
- CentOS/RHEL(RPM 安装):默认在
/var/log/mysqld.log - Ubuntu/Debian:通常在
/var/log/mysql/error.log或/var/log/syslog中 greptemporary password - Windows(ZIP 解压版):在
data目录下的主机名.err 文件里,比如DESKTOP-ABC123.err
执行命令快速提取:
sudo grep 'temporary password' /var/log/mysqld.log
输出类似:2026-06-08T10:22:34.123456Z 1 [Note] A temporary password is generated for root@localhost: YdsGaxOq>2n!,后面那段就是临时密码。
用临时密码登录后必须立刻改密码,否则多数命令报错
登录后不能直接执行 SELECT、SHOW DATABASES 等操作,MySQL 会立即返回 ERROR 1820:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
这是因为 MySQL 5.7 强制要求首次登录后重置密码。此时只能做两件事:改密码,或退出。
正确做法是执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass123!';
注意:
-
'root'@'localhost'中的Host值必须匹配日志里提示的 host(常见是localhost,不是127.0.0.1) - 密码需满足
validate_password插件策略(默认要求大小写字母+数字+特殊字符,长度 ≥8),否则报 ERROR 1819 - 执行完必须跟
FLUSH PRIVILEGES;,但其实ALTER USER已隐式刷新,这步可省
密码太简单被拒绝?临时调低策略再改
如果想设 123456 或 root 这类弱密码,直接执行 ALTER USER 会失败:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
临时绕过方法(仅限测试环境):
SET GLOBAL validate_password_policy=LOW;<br>SET GLOBAL validate_password_length=1;
然后再执行 ALTER USER。注意这两条 SET 是 session 级,重启 mysqld 后失效;如需持久化,得写进 my.cnf 的 [mysqld] 小节:
validate_password_policy=LOW<br>validate_password_length=1
但生产环境不建议关策略——宁可生成强密码,别碰 UNINSTALL PLUGIN validate_password,那会清空整个插件,后续再装可能出兼容问题。
改完密码后连不上?检查 Host 匹配和网络权限
改完密码仍无法远程连接,常见原因不是密码错,而是 Host 不对:
-
'root'@'localhost'只允许本机 socket 或 127.0.0.1 连接,不接受远程 IP - 要允许任意 IP 连接,得额外授权:
CREATE USER 'root'@'%' IDENTIFIED BY 'MyNewPass123!'; GRANT ALL ON *.* TO 'root'@'%' WITH GRANT OPTION; - 别忘了
FLUSH PRIVILEGES;,且防火墙要放行 3306 端口
最易忽略的一点:MySQL 5.7 默认禁用 skip-networking,但如果你之前为重置密码加过 skip-grant-tables 却没清理配置,服务可能仍处于非标准模式,导致权限表未加载——务必确认 my.cnf 里已删掉所有调试相关配置并重启 mysqld。











