MySQL 8.0 是当前生产环境的默认推荐版本
除非有明确的兼容性约束,否则直接选
MySQL 8.0.x(如
8.0.33或更新的 LTS 小版本)。它已稳定运行多年,InnoDB 默认字符集改为
utf8mb4,支持原子 DDL、角色管理、JSON 增强、隐藏索引等关键特性。老项目若长期停留在 5.7,往往不是因为 8.0 不行,而是没做升级验证——这属于流程问题,不是版本缺陷。
哪些情况必须用 MySQL 5.7 或更低版本
常见于遗留系统对接或中间件强绑定场景,比如:
使用MyBatis 3.2.x或更老版本,且未适配
mysql-connector-java 8.0+的驱动协议变更(如
com.mysql.cj.jdbc.Driver替代
com.mysql.jdbc.Driver) 依赖
mysql-proxy或某些定制化审计插件,而这些组件未发布 8.0 兼容版 DBA 团队对 8.0 的
data dictionary表结构变更(全存 InnoDB)缺乏运维经验,且暂无灰度验证计划 云厂商 RDS 提供的旧版只读实例仅支持 5.7(如阿里云部分地域的早期集群)
不要碰 MySQL 5.6 及更早版本,也不要盲目追最新 RC 版
MySQL 5.6已于 2021 年终止官方支持,漏洞不再修复;
MySQL 5.5及以前版本连
utf8mb4都不完整支持,容易引发 emoji 存储截断。另一方面,
MySQL 9.0目前仍是开发代号,官方尚未发布正式版;任何标称 “MySQL 9.0” 的安装包都非 Oracle 官方源,极可能是第三方魔改或误标。
真正需要关注的是小版本号:优先选
8.0.33、
8.0.34这类带“LTS”性质的维护版,避开刚发布的
8.0.32(发布首月常含未暴露的复制或备份 bug)。
Linux 下安装时注意发行版仓库的包滞后问题
Ubuntu/Debian 的
apt install mysql-server或 CentOS Stream 的
dnf install @mysql默认拉取的是系统镜像维护的打包版本,往往比 Oracle 官方
.deb/
.rpm晚 3–6 个月,且可能被修改默认配置(如禁用
sql_mode=STRICT_TRANS_TABLES)。强烈建议: 从 dev.mysql.com 下载对应系统的
mysql-community-server官方包 跳过系统仓库的
mysql-server元包,避免和
mariadb冲突(尤其在 CentOS 8+ 上) 安装后立刻检查
SELECT VERSION(), @@sql_mode;,确认未被 distro patch 暗改
版本选择的本质不是找“最新”,而是找你团队能 hold 住的、有明确安全支持周期的那一个。8.0.33 和 5.7.40 的差距,远小于一个没做过主从切换演练的 DBA 面对 8.0 复制延迟时的手忙脚乱。
