mysql 5.7+首次安装后需根据系统类型处理root登录:centos/RHEL查看临时密码,ubuntu/debian常需跳过权限验证重置;修改密码后可授权远程访问并调整密码策略。

MySQL 5.7 及以上版本在首次安装后默认没有设置 root 密码,而是采用 auth_socket 插件认证(Ubuntu/Debian 常见),或生成临时密码(CentOS/RHEL 常见)。直接用 mysql -u root -p 登录会失败。需先绕过权限验证,再修改密码。
查看或获取初始临时密码(适用于 CentOS/RHEL 安装)
安装完成后,MySQL 会在错误日志中生成一个临时 root 密码:
- 执行:
sudo grep 'temporary password' /var/log/mysqld.log - 输出类似:
A temporary password is generated for root@localhost: aB3#xY9!mQ2p - 复制该密码,用
mysql -u root -p登录,然后立即用ALTER USER修改
跳过权限验证重置密码(适用于无法登录或忘记密码)
当连临时密码都无效,或使用 auth_socket(如 Ubuntu 默认)导致无法用密码登录时,需临时跳过权限检查:
- 停止 MySQL:
sudo systemctl stop mysql(Ubuntu)或sudo systemctl stop mysqld(CentOS) - 以安全模式启动:
sudo mysqld_safe --skip-grant-tables --skip-networking & - 另开终端,无密码登录:
mysql -u root - 执行以下命令(MySQL 5.7+):
FLUSH PRIVILEGES;ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的新密码'; - 退出并重启 MySQL 服务
设置密码后验证并允许远程访问(可选)
默认 root 只允许本地登录。若需远程连接,需额外授权:
- 登录 MySQL 后执行:
CREATE USER 'root'@'%' IDENTIFIED BY '你的密码'; - 赋予全部权限:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; - 刷新权限:
FLUSH PRIVILEGES; - 确保 MySQL 配置文件中
bind-address不是127.0.0.1(改为0.0.0.0或注释掉),并开放防火墙端口(如 3306)
常见问题提醒
密码策略可能导致设置失败(如太简单):
- 查看策略:
SHOW VARIABLES LIKE 'validate_password%'; - 临时降低要求(测试环境):
SET GLOBAL validate_password.policy=LOW; - 避免使用纯数字、常见单词;推荐大小写字母 + 数字 + 符号组合,长度 ≥8
- 修改后务必重启服务或执行
FLUSH PRIVILEGES;生效