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 文件传密码,不走命令行
相关推荐
云飞云共享云桌面1 小时前
钣金制造研发优化:不采购传统工作站,实现 SolidWorks 团队共用服务器开展三维建模
运维·服务器·网络·数据库·3d·制造
艾伦野鸽ggg1 小时前
JavaScript 原型链与原型对象详解
javascript·原型模式
qq_350897211 小时前
trea实用工具
vue.js·uniapp
4SAPI1 小时前
2026年大模型API接入选型指南:企业与个人用户的架构、稳定性与成本考量
大数据·开发语言·数据库·人工智能·架构·php
paopaokaka_luck1 小时前
非遗文物数字化系统(AI非遗问答、ONNX图像识别、协同过滤推荐、ECharts数据分析、非遗知识浏览与互动、文创商城订单闭环、文化活动报名签到、社区交流)
前端·javascript·vue.js·人工智能·数据分析·echarts
乘风gg1 小时前
AI Coding 提效 2 倍是真的吗?到底怎么衡量效果
前端·ai编程·claude
用户921080262861 小时前
从对象到原型链:理解 this、构造函数和 new
前端
猫不易1 小时前
Webpack 与 Vite:从 Loader / Plugin 到 Rolldown 统一引擎
前端·vite
她说..1 小时前
MySQL 与 Java 的 JSON 数据处理
java·mysql·json·springboot