首次登陆初始化密码及安全配置 MySQL

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,否则无密码可登录,极度危险!

七、安全检查清单(做完核对)

  1. root 密码已修改,不再使用临时密码
  2. 匿名账号已删除
  3. root 禁止远程登录(生产必须)
  4. test 数据库删除
  5. 密码校验插件按需开启
  6. 不要在公网直接暴露 3306 端口,可限制安全组来源 IP
© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享
评论 抢沙发
头像-次元社
欢迎您留下宝贵的见解!
提交
头像-次元社

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容