2026-09-08-mysql-57-init-walkthrough

云服务器部署踩坑:MySQL 5.7 初始化全流程

背景

给一台云服务器部署物业管理系统,需要在 CentOS 7 上初始化 MySQL。本地开发环境是 MySQL 5.7.44,所以云上保持一致。

装包本身没什么问题,真正麻烦的是 MySQL 首次启动后的密码初始化链路 ------ 这里有三个隐藏坑,踩完记一笔。


坑一:临时密码默认 EXPIRED

CentOS 7 安装 MySQL 5.7 后,首次启动会自动生成一个临时 root 密码,记录在 /var/log/mysqld.log:

bash 复制代码
grep 'temporary password' /var/log/mysqld.log | tail -1
# 输出类似:
# A temporary password is generated for root@localhost: XXXX

关键点:这个密码默认是 EXPIRED 状态。

在交互模式下(直接敲 mysql),客户端会自动提醒你去改密码。但在非交互模式 (mysql -e '...')下,你必须显式加 --connect-expired-password 才能连上:

bash 复制代码
# ❌ 不加 flag,直接报错
mysql -uroot -p'临时密码' -e 'SELECT 1;'
# ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

# ✅ 加 flag,才能执行 ALTER USER
mysql -uroot -p'临时密码' --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';"

更麻烦的是:EXPIRED 状态下,除了 ALTER USER,其他任何语句(SELECT、SHOW 等)全被拒。 所以第一步必须是 ALTER USER,不能用 SELECT 测试连接。


坑二:MEDIUM 密码策略拒绝简单密码

MySQL 5.7 默认开启 validate_password 插件,策略是 MEDIUM,要求:

  • 长度 ≥ 8
  • 至少 1 大写 + 1 小写 + 1 数字 + 1 特殊字符

直接 ALTER USER ... IDENTIFIED BY '123456' 会报密码策略错误。

解决方案:先改一个满足 MEDIUM 的强密码,降策略后再改回简单密码。


坑三:密码含特殊字符的传递

MySQL 随机生成的临时密码有时包含 , 等特殊字符,直接写在命令行里会被 shell 解析出错。

稳健做法:用 .cnf 配置文件传密码。

bash 复制代码
# 写一个临时 .cnf 文件
cat > /tmp/mysql.cnf <<EOF
[client]
user=root
password=你的密码
EOF
chmod 600 /tmp/mysql.cnf

# mysql client 读文件,shell 不碰密码
mysql --defaults-file=/tmp/mysql.cnf -e 'SELECT 1;'

完整链路(5 步)

把上面三个坑串起来,完整的 MySQL 5.7 初始化链路:

步骤 命令 说明
1 grep 'temporary password' /var/log/mysqld.log 取出临时密码
2 ALTER USER ... IDENTIFIED BY 'Root@12345' 改成满足 MEDIUM 的强密码(用 --connect-expired-password + .cnf 传密码)
3 切换 .cnf 到强密码,重新连接 验证连通,此时密码不再 EXPIRED
4 SET GLOBAL validate_password_policy=LOW; SET GLOBAL validate_password_length=4; 降策略
5 ALTER USER ... IDENTIFIED BY '123456' 改成最终简单密码
6 CREATE USER 'root'@'%' ... + GRANT 开启远程登录

之后就可以正常建库、建用户、授权了。


总结

坑 症状 解法
临时密码 EXPIRED 非交互模式报错 1820 加 --connect-expired-password
EXPIRED 下只允许 ALTER USER SELECT/SHOW 全被拒 第一个命令必须是 ALTER USER
MEDIUM 策略拒绝简单密码 ALTER USER 报密码策略错误 先改强密码 → 降策略 → 改回简单密码
特殊字符密码解析错误 shell 把 , 当分隔符 用 .cnf 文件传密码,不走命令行
相关推荐
cmes_love6 小时前
期货期权L2五档行情、逐笔成交、分钟日线数据字段速览
数据库
汉堡大王95276 小时前
一张图三句需求,我用 Trae Work 做了一块能看日出日落和月相的天文机械表
前端·后端·github
神仙别闹6 小时前
基于C语言实现 TINY+ 编译器
c语言·开发语言·数据库
小小善后师6 小时前
用 Canvas + AI 实现登录页的 Logo 粒子动画
前端·vue.js
Amos_Web6 小时前
Rspack 源码解析(十六):多类型资源如何进入 Compilation.assets
前端·rust·前端框架
GAMC6 小时前
chrome-devtools-mcp:让 AI 编码助手真正"看见"浏览器
前端·人工智能
deli0076 小时前
高尔顿板:把球一颗颗丢下去,为什么最后总堆成一座钟形山
前端
java_nnnn6 小时前
JavaEE进阶-CSS初识
java·前端·css·java-ee·html
good_ideal6 小时前
从零实现一个自动提交 PR 的 MCP 工具:用 Skill 串起 Git 与 Azure DevOps
前端
0nirvana06 小时前
从普通 script 到 ESM:一文搞懂 JavaScript 模块、IIFE 和 window
javascript