新装mysql 5.7/8.0的root密码需从日志查临时密码,未启动服务则无日志;查不到时应先systemctl start mysqld再grep;输错三次会锁定账户;alter user报error 1819需临时调低密码策略;skip-grant-tables必须正确配置并重启服务,改密后务必删除该配置并再次重启。

新装的 MySQL 5.7 或 8.0,root 密码不是空的,也不是 root,必须从日志里找临时密码;直接输错三次会锁账户,别硬试。
查不到 temporary password?先确认 mysqld 是否真正启动过
MySQL 安装后不会自动生成临时密码,只有首次执行 mysqld 启动(比如 systemctl start mysqld)才会写入日志。如果刚装完没启过服务,grep 'temporary password' /var/log/mysqld.log 必然返回空。
- 运行
systemctl status mysqld,确认状态是active (running) - 若为
inactive (dead),先执行systemctl start mysqld,再等 5–10 秒 - 再查日志:
grep 'temporary password' /var/log/mysqld.log,应有类似A temporary password is generated for root@localhost: rF9a!xK2mQp#的输出 - 如果仍为空,检查日志路径是否正确——RPM 包安装默认是
/var/log/mysqld.log,但某些源码编译或容器环境可能不同
ALTER USER 报错 ERROR 1819?密码策略在拦你
MySQL 5.7+ 默认启用密码强度校验,设 '123456' 或 'password' 会直接报错 ERROR 1819 (HY000): Your password does not satisfy the current policy requirements。
- 临时放宽策略(仅限重置时):
SET GLOBAL validate_password_policy=LOW;(MySQL 5.7)或SET GLOBAL validate_password.policy=LOW;(MySQL 8.0) - 再设长度下限:
SET GLOBAL validate_password_length=4;(5.7)或SET GLOBAL validate_password.length=4;(8.0) - 然后执行:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpass123'; - 注意:改完别忘了
FLUSH PRIVILEGES;,否则新密码不生效
跳过权限表进不去?skip-grant-tables 配置位置和重启方式错了
手动加 skip-grant-tables 到 /etc/my.cnf 后,必须用 systemctl restart mysqld,不能只 kill 进程再 mysqld_safe &——后者常因权限、PID 文件冲突失败,且 systemd 会立刻拉起原服务。
- 编辑
/etc/my.cnf,在[mysqld]段下新增一行:skip-grant-tables - 保存后执行:
systemctl restart mysqld(不是start) - 验证是否生效:
mysql -u root应直连成功,无需密码;若仍提示输入密码,说明配置未加载——检查是否有多个[mysqld]段,或配置文件被include覆盖 - 改完密码后,务必删掉
skip-grant-tables行,并再次systemctl restart mysqld,否则数据库裸奔
MySQL 8.0 执行 UPDATE user SET authentication_string=... 失败?函数已废弃
MySQL 8.0 彻底移除了 PASSWORD() 函数,且 authentication_string 字段必须用 ALTER USER 设置,直接 UPDATE 会报错 ERROR 1290 (HY000): The MySQL server is running with the --skip-grant-tables option so it cannot execute this statement 或字段不可写。
- 进入 MySQL 后,先执行:
USE mysql;,再SELECT user, host, plugin, authentication_string FROM user WHERE user='root'; - 确认
plugin是caching_sha2_password(8.0 默认)还是mysql_native_password - 安全做法是统一用:
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'your_new_pass'; - 如需兼容旧客户端,可指定插件:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'your_new_pass';
最易被忽略的是:改完密码后没清空 ~/.mysql_history,临时密码或新密码会明文留在历史记录里;还有人重启前忘了删 skip-grant-tables,导致数据库长期无权限控制——这两处比密码本身更危险。











