MySQL 5.7 初始密码需从错误日志中查找:Linux 下执行 sudo grep 'temporary password' /var/log/mysqld.log,Windows 下在 Data/主机名.err 中搜索 temporary password,找到后用该密码登录并立即执行 ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码' 和 FLUSH PRIVILEGES。

能直接用 ALTER USER 设置,前提是已用初始密码登录成功;如果连初始密码都不知道,就得先从日志里找或跳过权限验证重置。
怎么查 MySQL 5.7 的初始密码?
安装完 MySQL 5.7 后,root 用户不是空密码,而是系统自动生成的临时密码,藏在错误日志里:
- Linux 下通常在
/var/log/mysqld.log,执行sudo grep 'temporary password' /var/log/mysqld.log - Windows 下查看
my.ini中log-error指定的路径,或默认在 MySQL 安装目录的Data/主机名.err文件中搜temporary password - 找到类似
A temporary password is generated for root@localhost: xxxxxxxx的行,后面那段就是初始密码
用初始密码登录后改密码(推荐流程)
拿到初始密码后,必须立刻改掉,否则后续任何操作都会被拒绝(MySQL 5.7 强制要求首次登录后修改密码):
- 执行
mysql -u root -p,输入初始密码进入 - 运行
ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码';—— 注意:密码必须满足validate_password插件策略(至少 8 位,含大小写字母、数字、特殊字符) - 立即执行
FLUSH PRIVILEGES;,否则新密码不会生效 - 退出再重试登录:
exit→mysql -u root -p→ 输入新密码
忘记初始密码时怎么重置?
不能靠猜,也不能删数据目录,得用 --skip-grant-tables 模式绕过认证:
- 先停服务:
sudo systemctl stop mysqld(Linux)或net stop mysql57(Windows) - 启动跳过权限检查:
sudo mysqld_safe --skip-grant-tables --skip-networking &(Linux);Windows 需加--defaults-file指向my.ini路径 - 无密码登录:
mysql -u root,进库后先USE mysql; - 更新密码字段:
UPDATE user SET authentication_string = PASSWORD('新密码'), password_expired = 'N' WHERE User = 'root' AND Host = 'localhost';—— 注意字段名是authentication_string,不是password - 必须执行
FLUSH PRIVILEGES;,否则修改不加载 - 杀掉
mysqld进程(pkill mysqld或任务管理器结束),再正常启服务
最易忽略的一点:改完密码后不执行 FLUSH PRIVILEGES;,或者用了旧版语法如 SET PASSWORD,会导致看似成功实则登录失败;另外,HOST 值必须匹配('root'@'localhost' 和 'root'@'%' 是两个不同账户),别只改了一个却连另一个。


















