mysql_secure_installation 是生产环境初始化 root 密码的强制推荐路径,可批量设置密码、删除匿名用户、禁止远程 root 登录、删除测试库并刷新权限表。

mysql_secure_installation 是首选入口
生产环境初始化 root 密码,mysql_secure_installation 不是可选项,而是强制推荐路径。它不只是设密码,而是批量关闭高危面:匿名用户、测试库、远程 root 登录、空密码账户——这些在 mysqld --initialize 后默认都开着。
执行前确认 MySQL 已首次启动(systemctl start mysqld),日志中已生成临时密码(通常在 /var/log/mysqld.log 或 journalctl -u mysqld 里搜 A temporary password)。运行时会提示输入该临时密码,再让你设置新密码:
- 密码必须满足策略:至少 8 位、含大小写字母+数字+特殊字符(由
validate_password插件控制) - 若跳过“Remove anonymous users”,后续可能被扫描工具利用空用户名爆破
- 务必选择 “Disallow root login remotely”,否则
'root'@'%'账户一旦存在,防火墙漏配就等于裸奔 - “Reload privilege tables now?” 必须选 yes,否则前面操作不生效
跳过密码策略或自定义强度需提前干预
如果业务要求弱密码(如内网测试环境),不能靠改完密码再关插件——mysql_secure_installation 会在 reload 前校验强度,直接报错退出。正确做法是在首次启动前禁用验证:
- 编辑
/etc/my.cnf,在[mysqld]段添加:validate_password.policy=LOW或彻底禁用:validate_password=OFF - 重启服务:
systemctl restart mysqld,再运行mysql_secure_installation - 注意:
validate_password=OFF仅适用于离线/内网环境;生产环境建议保留策略,用密码管理器生成合规密码
MySQL 8.4 默认启用强策略,不干预会导致脚本卡在密码输入环节,错误信息类似:Failed! Password validation failed.
手动 ALTER USER 修改密码的边界条件
只有在 mysql_secure_installation 不可用时(如容器 init 容器无交互终端),才退到手动方式。但必须满足两个前提:
- 已用临时密码登录成功:
mysql -u root -p,粘贴日志里的临时密码 - 执行语句必须带主机限定:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';——漏掉@'localhost'会创建新账户而非修改,原账户仍用旧密码 - MySQL 8.4 不再支持
UPDATE mysql.user直接改authentication_string字段,会报错ERROR 1820 (HY000): You must reset your password using ALTER USER statement - 改密后立即执行
FLUSH PRIVILEGES;,否则权限缓存未更新,下次登录仍可能被拒绝
初始化后必须验证的三件事
设完密码不是终点,以下检查项漏掉任一都会导致后续连接失败:
- 确认 root 用户实际权限:
SELECT User, Host, plugin FROM mysql.user WHERE User = 'root';—— 若plugin是auth_socket(常见于 Ubuntu 包安装),需先改成caching_sha2_password:ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY '密码'; - 检查监听地址:
SELECT @@bind_address;,生产环境不能是0.0.0.0,应为127.0.0.1或内网 IP;若需远程访问,必须额外授权用户(如'app'@'10.0.1.%'),而非放开 root - 验证客户端兼容性:MySQL 8.4 默认用
caching_sha2_password认证,老版本 JDBC 驱动(Public Key Retrieval is not allowed,需在连接串加?allowPublicKeyRetrieval=true&useSSL=false或升级驱动
最常被忽略的是 plugin 类型和 bind_address,它们不报错、不阻断初始化,但会让应用连不上,排查时容易绕远路。











