MySQL5.7 初始化后自动生成过期临时密码,必须先修改密码才能执行其他操作;官方推荐使用
mysql_secure_installation一键做安全加固。
前置:确认 MySQL 已启动
systemctl status mysqld
如果没启动:
systemctl start mysqld
systemctl enable mysqld
一、获取临时初始密码
密码存在 MySQL 日志 /var/log/mysqld.log
grep 'temporary password' /var/log/mysqld.log
输出示例:
A temporary password is generated for root@localhost: 9s*Kf2wq!rT1
9s*Kf2wq!rT1 就是临时密码,复制保存。
⚠️ 二进制 tar 包安装的 MySQL,日志路径不一样,看自己
my.cnf里log-error配置。
二、方式 1:手动登录修改 root 密码
mysql -uroot -p
粘贴上面临时密码登录。
登录成功后,不能执行任何查询,必须先改密码,因为临时密码标记为过期。
修改 root 密码(生产环境推荐强密码)
MySQL5.7 默认开启密码校验插件validate_password,默认策略:最少 8 位,包含大写、小写、数字、特殊符号
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root@2026Abc';
刷新权限:
FLUSH PRIVILEGES;
exit;
测试环境:调低密码策略(生产严禁!)
如果测试想使用简单密码,登录后执行:
set global validate_password_policy=0;
set global validate_password_length=4;
再执行 ALTER USER 修改密码。
三、方式 2:官方一键安全脚本 mysql_secure_installation(推荐!)
这个脚本一次性完成:修改 root 密码、移除匿名用户、禁止 root 远程登录、删除 test 测试库,生产环境必执行MySQL
mysql_secure_installation
交互式问答逐行说明(推荐全部 y)
Enter current password for root (enter for none):
# 输入刚才日志拿到的临时密码
VALIDATE PASSWORD PLUGIN can be used to test passwords...
Would you like to setup VALIDATE PASSWORD plugin?
# 是否开启密码强度校验,生产 y,测试可选n
Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG:
# 0低,1中,2强,一般选1
Change the password for root ? ((Press y|Y for Yes, any other key for No) : y
# 是否修改root密码 y
New password:
Re-enter new password:
# 设置新root密码
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y
# 删除匿名用户 y
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y
# 禁止root远程登录【强烈建议y】
# 后续需要远程访问,新建普通管理账号,不要开放root远程
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y
# 删除test库 y
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y
# 刷新权限 y
完成!MySQL 基础安全加固全部做完。
四、【可选】授权远程访问(不推荐 root 远程!)
✅最佳实践:新建管理账号,不要把 root 开放给远程。 如果开发测试一定要 root 远程(生产禁止):
mysql -uroot -p
# 授权root从任意IP访问
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'Root@2026Abc';
FLUSH PRIVILEGES;
exit;
防火墙放行 3306:
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
云服务器:控制台安全组放行 3306 端口。
五、创建普通管理账号(生产推荐替代 root 远程)
# 创建admin用户,允许任意IP登录
CREATE USER 'admin'@'%' IDENTIFIED BY 'Admin@2026Abc';
# 授予全部权限
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;
FLUSH PRIVILEGES;
远程连接用 admin 账号,root 只本地登录。
六、常见报错 & 排错
1. 找不到临时密码
- 原因:不是首次初始化,
/var/lib/mysql已有旧数据,不会生成临时密码 - 处理:停止 mysql,清空
/var/lib/mysql,重新初始化(数据全部丢失)
systemctl stop mysqld
rm -rf /var/lib/mysql/*
systemctl start mysqld
# 再重新grep获取临时密码
2. 密码不符合策略报错
密码必须满足:长度≥8,大小写、数字、特殊符号;测试环境可调低 validate_password 策略。
3. 密码忘记重置密码(跳过权限)
# 停止mysql
systemctl stop mysqld
# 修改my.cnf
vi /etc/my.cnf
# 在[mysqld]添加一行
skip-grant-tables
保存,启动 mysql
systemctl start mysqld
mysql -uroot
FLUSH PRIVILEGES;
ALTER USER 'root'@'localhost' IDENTIFIED BY 'Root@2026Abc';
exit;
重要:改完密码,删掉 my.cnf 里 skip-grant-tables,重启 mysql,否则无密码可登录,极度危险!
七、安全检查清单(做完核对)
- root 密码已修改,不再使用临时密码
- 匿名账号已删除
- root 禁止远程登录(生产必须)
- test 数据库删除
- 密码校验插件按需开启
- 不要在公网直接暴露 3306 端口,可限制安全组来源 IP











暂无评论内容