◈ DB 选型参考
← 返回首页

MySQL

关系型 OLTP

MySQL Server(Oracle 旗下开源关系型数据库)

用 AI 深挖这款:
证据等级:官方文档 厂商口径 社区实测 社区共识 待验证

基本信息

项内容
全称MySQL Server(Oracle 旗下开源关系型数据库)
当前稳定线8.4.x(首个 LTS)、9.7.x(2026-04 起第二个 LTS)官方文档
版本策略自 2023 年起双线:LTS(约每 2 年一版,Premier 5 年 + Extended 3 年;同一 LTS 内功能与数据格式冻结,支持原地升级/降级)与 Innovation(快速迭代、短支持周期)官方文档
存储引擎InnoDB 为默认引擎(事务、MVCC、行锁、崩溃恢复);另有 MyISAM(遗留)、NDB(MySQL Cluster 独立产品)等
许可证Community 版 GPLv2;MySQL Enterprise Edition 商业订阅;云服务 MySQL HeatWave(OCI/AWS)
协议MySQL 协议(wire protocol),事实上的生态标准

版本线索(截至 2026-10-02 查阅):

  • 8.0 → 8.4 → 9.7 为 LTS 升级路径;8.0 据社区资料于 2026-04-30 结束常规支持(EOL),进入 Sustaining Support 社区共识(正式措辞待官方页复核)。
  • 托管侧注意:DigitalOcean 官方宣布托管 MySQL 8.0 将于 2026-10-30 结束支持,自该日起现存托管 8.0 集群将在各自维护窗口强制升级到 8.4(官方称无停机,但维护窗口内可能有短暂延迟;建议升级前确认/调整维护窗口)官方文档(DigitalOcean 发布页原文)。注意这是 DigitalOcean 托管侧的 EOL 时间点,与 Oracle 官方 8.0 常规支持结束(2026-04-30)是两个口径。
  • 有第三方资料称 9.7 之后 Oracle 改用日历版本号(如 26.7 Innovation),但本档案评审 8.x/9.x,统一以 9.7 LTS 为评审版本;日历版本变化标 待验证,不写死。
  • 8.4 中 mysqlpump 二进制不再发布、SHOW SLAVE STATUS/CHANGE MASTER TO 被移除(统一为 REPLICA/SOURCE 术语)、expire_logs_days 被移除(改用 binlog_expire_logs_seconds)、binlog_format 仅支持 ROW、TLS 1.0/1.1 被移除 社区共识(多份升级检查清单一致指向)。

硬维度(47 项)

1 静态加密 / TDE 部分支持

  • 有:InnoDB 表空间静态加密,两级密钥结构(tablespace key 存于表空间头部,由 master key 加密;支持主密钥轮换)官方文档。覆盖范围:表空间、doublewrite、系统表空间、redo、undo;binlog/relay log、审计日志加密需分别配置 官方文档。
  • 所有 Edition(含社区版)都有本地文件型 keyring(component_keyring_file/keyring_file);Enterprise 额外提供加密密码保护文件、KMIP、Oracle Key Vault、AWS KMS 等 keyring 后端 官方文档。
  • 社区版具备表空间加密,但本地文件 keyring 不等于合规级外部 KMS/HSM;密钥丢失即数据不可恢复 社区共识。
  • TDE 不保护运行中内存、授权 SQL 用户或传输中的数据 官方文档。
  • 云托管注意:RDS/Aurora MySQL 不支持 MySQL 原生 keyring/TDE,改用云盘 KMS 加密替代——这是云方案差异,不是 MySQL 内核缺陷 社区共识。

2 TLS / 传输加密 有

  • 支持 TLS 连接、证书与 cipher 配置;MySQL 8.4 移除了 TLS 1.0/1.1 社区共识。
  • caching_sha2_password 的完整认证流程需要安全连接(TLS)或 RSA 密钥交换,否则老客户端可能连不上——这是 8.0→8.4 升级最常见的连接中断原因之一 社区共识。

3 审计 部分支持(企业版分水岭)

  • Enterprise Audit 插件(audit_log)仅限商业版;社区版没有官方审计插件 社区共识。
  • 社区替代方案:general log(性能开销大,不适合生产常开)、binlog(只记录变更不记录读)、Percona Server 自带的免费 Audit Log Plugin(配置键与官方不同)社区共识。
  • 结论:合规审计需求在社区版是"能凑合但不体面",企业版才有一等公民方案。

4 认证与权限 有(部分企业版功能缺失)

  • 有:caching_sha2_password(8.0 起默认)、角色(Role)、动态权限(SUPER 被拆分为 SYSTEM_VARIABLES_ADMIN 等细粒度权限)社区共识。
  • 8.4 起 mysql_native_password 默认禁用(独立动态插件,需显式 --mysql-native-password=ON 启用),老客户端升级后连不上是第一大坑 社区实测 社区共识。
  • 企业版独占:PAM、LDAP、Kerberos 认证;FIDO 认证在 8.4 被移除 社区共识。
  • 缺失:行级安全(Row-Level Security)。MySQL 没有 PG 式的 RLS,只能靠视图/应用层实现多租户隔离 社区共识。

5 备份恢复 有(工具链完整但层级分明)

工具类型适用备注
mysqldump逻辑<10GB、小库、跨版本迁移单线程;大库备份慢、恢复更慢 社区共识
MySQL Shell dump/load逻辑并行10GB+mysqlpump 已在 8.4 移除,官方推荐改用它 社区共识
Percona XtraBackup物理热备大库生产免费开源、增量、恢复快;社区版事实标准 社区共识
MySQL Enterprise Backup物理热备大库生产商业版独占 社区共识
Clone 插件物理克隆快速建从库/测试环境内建,支持本地与远程克隆 社区共识
  • PITR:全备 + binlog 回放实现;需要 log_bin 开启并保留 binlog(8.4 用 binlog_expire_logs_seconds 控制过期)社区共识。
  • 深水点:备份≠恢复能力。逻辑备份恢复是单线程回放 SQL,大库 RTO 以小时计;物理备份需 --prepare;从没做过恢复演练的备份只是愿望 社区共识。

6 可观测性 有(内建强,但有"可观测性税")

  • 有:performance_schema + sys schema(SQL digest、等待事件、锁、IO、线程)、慢查询日志、SHOW ENGINE INNODB STATUS、data_locks/data_lock_waits、EXPLAIN ANALYZE 社区共识。
  • 税:默认 instrument 集通常适合生产;全开所有 instrument/consumer 会产生可测开销。LINE 旧实测在特定 sysbench 场景下全开约降 TPS 15%——必须强调这是旧版特定负载的社区实测,不能推广为固定数字 社区实测。
  • 慢日志阈值设太低会产生明显 IO 开销;EXPLAIN ANALYZE 会真实执行语句,写语句不能当无副作用诊断用 社区共识。
  • 正确姿势:选择性启用 + 事故期间临时放大采集。

7 连接模型 有

  • 默认 thread-per-connection:每个连接一个 OS 线程;max_connections 默认 151 社区共识。
  • 线程池(Thread Pool)插件仅限 Enterprise;Percona Server 提供免费的 thread_pool 插件作为替代 社区共识。
  • 深水点:每个连接的内存成本是真实的(sort_buffer_size、join_buffer_size 等按连接分配);社区有"1000 连接 × 256MB sort buffer = 256GB 上限"的经典算式 社区共识。连接风暴下线程上下文切换会拖垮实例,生产标准做法是前面加连接池(ProxySQL / MySQL Router / 应用侧有界池),池大小一般取 max_connections - 10(留 10 给管理和复制)社区共识。

8 事务与隔离级别 有

  • 默认 REPEATABLE READ,InnoDB 用 record lock + gap lock + next-key lock 防幻读 社区共识。
  • 不同键的 INSERT 也可能死锁(落在同一 gap、唯一性检查、加锁顺序不同);缺索引的 UPDATE/DELETE 会扫描逐行加锁(不是"锁升级",而是大量行锁)社区共识。
  • 死锁自动检测并回滚一个 victim(错误 1213),应用必须捕获并重试整个事务;1205 是锁等待超时,与死锁不同 社区共识。
  • 降到 READ COMMITTED 能减少大部分 gap 锁,但消灭不了锁顺序、唯一键、外键导致的死锁 社区共识。
  • 长事务/大事务见深水区。

9 复制与一致性 有

  • 默认异步复制:主库提交不等从库,切主可能丢未应用事务,RPO > 0 社区共识。
  • GTID + SOURCE_AUTO_POSITION=1 简化从库重定位,但 GTID 不是零丢失保证;提升从库前仍要比对 Executed_Gtid_Set 社区共识。
  • 半同步 AFTER_SYNC:用约一次网络 RTT 换已确认提交的更强持久性;AFTER_COMMIT 不能等同无丢失 社区共识。
  • Group Replication:内置复制组/故障转移;但认证过程不考虑 gap 锁(多主模式官方推荐 READ COMMITTED)、有事务大小限制、要求表有主键(无主键表在组内不可写)、InnoDB Cluster 官方明确只适合局域网(跨 WAN 写性能明显受损),多数据中心用 InnoDB ClusterSet(异步链路)官方文档。
  • 读扩展:从库只扩读不扩写;Seconds_Behind_Source 有空闲重置等盲区,社区建议用 heartbeat/GTID 交叉监控 社区共识。

10 扩展方式 部分支持(无原生自动分片)

  • 纵向:单机 scale-up(大内存、大 NVMe 是 MySQL 的舒适区)。
  • 横向读:异步从库、Group Replication、InnoDB Cluster。
  • 横向写:原生无自动分片。靠 Vitess / ShardingSphere / ProxySQL 等中间件,或应用层分片 社区共识。
  • NDB Cluster(MySQL Cluster)是独立产品,内存-centric、运维小众,不计入常规选型 社区共识。

11 兼容性 有(协议是事实标准,但家族已分化)

  • MySQL 协议 + SQL 方言是生态事实标准:驱动、ORM、工具链最全 社区共识。
  • 分化现实:MariaDB 已走远(GTID、系统表、优化器行为多处不兼容);Aurora MySQL 线路兼容但存储引擎完全不同(故障行为、性能特征不能直接套用);Percona Server 紧跟上游、基本可视为"MySQL+补丁" 社区共识。

12 许可证与商业模式 有(双轨清晰)

  • Community:GPLv2,功能完整但无官方审计/线程池/企业级 keyring 后端/PAM-LDAP/商业备份工具 社区共识。
  • Enterprise Edition:商业订阅,含上述企业插件 + MySQL Enterprise Monitor + 官方支持(LTS:Premier 5 年 + Extended 3 年)官方文档。
  • 云:MySQL HeatWave(OCI/AWS 上的托管 MySQL + 内存加速/Lakehouse),Oracle 的云叙事主力 社区共识。

13 中文资料丰富度 部分支持

  • 官方文档无中文版 待验证(未找到官方中文文档证据,标"查证为无"而非"未找到"需再确认,暂标待验证)。
  • 中文社区资料丰富(博客、专栏、翻译),但版本滞后于 8.4/9.x 新特性是常态 社区共识。

14 性能与延迟特征 有

  • 点查/短事务:单机 sysbench 点查可达数万 QPS 量级,P99 毫秒级(视硬件与调优)社区实测。
  • 读扩展靠主从复制加从库;写是单机上限,靠分片中间件(ShardingSphere/DBLE)或业务分片 社区共识。
  • 瓶颈:大事务、长 DDL(8.0 Instant DDL 缓解部分场景)、单表过大 社区共识。

15 合规与认证 部分支持

  • 社区版/企业版(Oracle):无公开的国测/信创认证信息;等保合规由部署方测评 待验证。
  • 各云厂商的托管 MySQL(RDS 等)继承云厂商的等保三级/可信云资质 厂商口径。
  • 国际:Oracle 云体系的 SOC2/ISO 等适用于 Oracle 运营的 MySQL HeatWave 云服务 厂商口径。

16 成熟度与社区生态 有

  • 1995 年发布,2010 年随 Sun 并入 Oracle;8.0/8.4 LTS、9.x 创新版并行 社区共识。
  • GitHub stars 万级,生态(驱动/工具/教程)最厚 社区共识。
  • 风险点:Oracle 主导下社区版与企业版功能分界时有争议 社区共识。

17 标杆用户 有(互联网大厂的基本盘)

  • Meta(Facebook)、Wikipedia 等公开重度用户 社区共识。
  • 曾支撑 YouTube/Twitter/Uber 早期架构,后部分迁移 社区共识。
  • 国内:各大厂自建 MySQL 分支(阿里/腾讯)是事实标准 社区共识。

18 生态工具链 有

  • 备份:mysqldump/MySQL Shell/XtraBackup/Clone 插件 社区共识。
  • 在线 DDL/迁移:gh-ost、pt-online-schema-change 社区共识。
  • CDC:Debezium、Canal;监控:PMM、mysqld_exporter + Prometheus 社区共识。

19 云托管与 Serverless 有

  • 各云厂商 RDS(阿里/腾讯/AWS/华为)全覆盖 社区共识。
  • Oracle MySQL HeatWave(云原生+分析加速)厂商口径。
  • Serverless:PlanetScale(基于 Vitess 的 Serverless MySQL)社区共识。
  • DigitalOcean 计划变更(分阶段生效,注意日期):2026-10-15 起从未创建过 PG/MySQL 集群的账号、2026-11-30 起全部账号,Standard Edition 新集群不可选 >4 GiB 内存规格且不支持备节点/只读节点;更大规格、高可用或只读扩展只能用 Advanced Edition(2026-10-15 起 Advanced Edition 新增 8–64 GiB Basic 共享 CPU 规格)官方文档(DigitalOcean 发布页原文)。限制生效前已创建的集群不受影响(仍可扩容、fork、加备节点/只读节点)——既有用户有一段缓冲,但新账号/新项目实际失去了 Standard Edition 的低成本高可用路径;用 API、Terraform 或 doctl 建集群的用户需在限制生效前更新代码 官方文档。
  • DigitalOcean 托管 MySQL 8.0 将于 2026-10-30 结束支持,当天起现存 8.0 集群在各自维护窗口被强制升级到 8.4(官方称无停机,但维护窗口内可能有短暂延迟)官方文档。

20 数据接入与摄入 有

  • LOAD DATA INFILE、mysqlimport 是最快单机导入通道 官方文档。
  • mydumper/myloader 并行逻辑导入导出,社区主流 社区共识。
  • mysqlsh util.loadDump 支持 MySQL Shell dump 的并行加载 官方文档。

21 外部数据访问 部分支持

  • FEDERATED 引擎可映射远端 MySQL 表,但功能/性能弱,生产少用 社区共识。
  • 无 S3/对象存储直查、湖仓格式支持 官方文档。
  • MySQL HeatWave 侧有对象存储查询,是商业版能力 厂商口径。

22 CDC 与下游同步 有(binlog(row)生态最成熟:

  • row 格式 binlog 是事实标准 CDC 源 官方文档。
  • Debezium、Canal、Maxwell、Flink CDC 均成熟 社区共识。
  • GTID + 半同步下位点管理简单;大事务 binlog 膨胀是常见坑 社区共识。

23 TTL 与数据生命周期管理 部分支持

  • 分区表 + event 定时 DROP 分区是生产标准做法 社区共识。
  • 无原生行级 TTL;大表 DELETE 慢且产生大量 undo/redo 社区共识。

24 在线 DDL 与 Schema 演进 部分支持

  • 只改定义:INSTANT 只动系统表元数据、O(1):加列(8.0.29+ 任意位置,此前仅末尾)、删列(8.0.29+ 默认 INSTANT)、重命名列(8.0.28+,同类型+同 NOT NULL 属性才保持在线)、改列 DEFAULT、ENUM/SET 末尾追加成员(存储字节不变);上限:64 次行版本、1022 列,COMPRESSED/FULLTEXT/临时表除外,加自增列至少 INPLACE+LOCK=SHARED 官方文档。
  • 重写但位置不变:建二级索引 INPLACE 后台构建 + 增量追踪 + 原子切换,LOCK=NONE 允许并发 DML(O(n) 回填,大表耗时但前台可写);VARCHAR 扩容不跨 255 字节边界可 INPLACE,缩容走 COPY 官方文档。
  • 搬数据:改列类型只支持 COPY(全表重建、长时间阻塞写);主键变更、字符集转换同样重建 官方文档。大表生产标准是 gh-ost(binlog 回放)/pt-osc(触发器),有主从延迟与触发器风险,最后的表切换仍要短暂 MDL 社区共识。
  • 验证约束:MySQL 不支持 NOT VALID 两阶段语法(查证为无);加 UNIQUE/普通索引走 INPLACE 在线构建、LOCK=NONE 允许并发 DML 官方文档。
  • 规模:第二、四类代价 O(n):小表秒级、大表数小时;即使 INPLACE 在线,回填也吃 IO 与复制带宽——"测试环境在线、生产锁死"的根源 社区共识。
  • 语义:DDL 隐式提交、非事务性(8.0 原子 DDL 只保证 crash 不留半成品,不能包进事务回滚)官方文档;三档算法在开始/提交阶段都要拿 MDL:长事务卡 DDL,排队中的 DDL 再卡住后续请求(MDL 队头阻塞);铁律:显式 ALGORITHM=INSTANT/INPLACE, LOCK=NONE,不满足就失败而不是悄悄降级 社区共识。

25 多租户与资源隔离 部分支持

  • 8.0 resource group 可做线程 CPU 亲和/优先级,无内存/IO 限流 官方文档。
  • 生产多租户靠多实例,单实例混布 noisy neighbor 常见 社区共识。

26 跨地域多活 部分支持

  • 主从/组复制可跨区,延迟看网络 社区共识。
  • 双写多活无原生冲突解决,生产禁区 社区共识。
  • Group Replication 跨区对延迟敏感 官方文档。

27 高可用架构与 RTO/RPO 部分支持

  • MHA 手动/半自动切,RTO 分钟级,有脑裂风险 社区共识。
  • MGR/InnoDB Cluster 原生自动切,RTO 秒到分钟,但运维复杂 官方文档。
  • 半同步复制可保 RPO≈0,异步则可能丢数 官方文档。

28 行级安全与数据脱敏 部分支持

  • MySQL 社区版无原生行级安全,行级隔离只能靠视图、存储过程或应用层 WHERE 过滤实现,绕开风险高 社区共识
  • MySQL 企业版提供 Data Masking and De-Identification 组件,支持在 SELECT 返回时对字段脱敏(如 mask_pan 等函数) 官方文档
  • 列级权限可通过 GRANT SELECT(col) 实现,但无动态脱敏策略引擎 官方文档
  • 主要成本风险:完整脱敏能力绑定商业版,社区版用户只能换企业版或自研 社区共识

29 JSON 与半结构化能力 有(原生 JSON+虚拟列索引)

  • 原生二进制 JSON,->>/JSON_TABLE,虚拟生成列建索引 官方文档。
  • JSON 列无法直接建索引(需虚拟列),大 JSON 更新整列重写 官方文档。

30 全文检索能力 有

  • FULLTEXT 索引,ngram parser 中文分词 官方文档。
  • 相关性算法简单,大规模检索弱于 ES 社区共识。

31 存储效率与压缩 有

  • InnoDB 支持页压缩(KEY_BLOCK_SIZE 1/2/4/8K)与透明页压缩(punch hole),行级减少磁盘占用。官方文档
  • Barracuda 文件格式 + DYNAMIC/COMPRESSED 行格式提升大对象存储密度。官方文档
  • 压缩带来额外 CPU 开销,写密集场景压缩比与性能需要实测权衡。社区实测

32 开源协议与厂商锁定风险 无

  • MySQL 社区版采用 GPLv2 协议开源,源码可自由获取与自部署。官方文档
  • Oracle 持有 MySQL 商标与版权,但 MariaDB、Percona Server 等 fork 长期并行维护,生态替代充分,迁移成本低。社区共识
  • 若使用 Oracle 官方企业版插件或 MySQL HeatWave 云服务,则存在云绑定与商业授权约束,回归自建可解。厂商口径

33 查询优化器与计划稳定性 有

  • CBO + EXPLAIN,hint 丰富(STRAIGHT_JOIN、FORCE INDEX、SET_VAR、QB_NAME)官方文档。
  • 直方图统计信息弱,无 Oracle 式计划基线冻结 官方文档。
  • 统计信息过期/参数变更导致计划翻转是常见生产问题 社区共识。

34 参数调优与自治能力 部分支持

  • 可调参数数百,调优复杂度高是 DBA 共识 社区共识。
  • performance_schema + sys schema 诊断体系完善 官方文档。
  • 无自动索引/自动重写,自治能力弱 官方文档。

35 静默数据损坏防护 有

  • InnoDB 数据页内置 checksum,读入时校验,损坏页直接拒绝载入。官方文档
  • doublewrite buffer 防 crash 写撕裂页,是静默损坏防护的关键一环。官方文档
  • 主从复制按页照搬,损坏可能静默扩散,需 pt-table-checksum 等外部工具定期校验。社区实测

36 存储过程/触发器/过程语言 有

  • 存储过程、触发器、事件调度完整 官方文档。
  • 无包、调试弱、异常处理简陋;去 O 迁移 PL/SQL 改写成本高 社区共识。

37 约束与数据完整性 有

  • InnoDB 外键、8.0.16+ CHECK 强制、唯一约束 官方文档。
  • 外键增加锁与级联写放大,高并发慎用 社区实测。

38 分析 SQL 完备性 有

  • 8.0 窗口函数、CTE(含递归)官方文档。
  • 优化器对复杂分析弱,大关联/排序易慢 社区共识。

39 被遗忘权与数据擦除 部分支持

  • DELETE 是行级硬删除(InnoDB 会回收空间,页内残留可被覆盖),但无“被遗忘权”工作流或擦除证明 官方文档
  • binlog、redo log 与备份中会留存被删数据的历史副本,物理擦除需轮转日志、重做备份,无自动化机制 社区共识
  • GDPR 场景常用“逻辑删除 + 定期物理清理”或分区 DROP TABLE 做批量擦除 社区实测
  • 复制拓扑放大残留面:从库与延迟备库在删除滞后窗口内仍可读到数据 社区共识

40 数据血缘与目录集成 无(查证为无原生血缘)

  • 无原生数据血缘/目录 官方文档。
  • 靠 Atlas/DataHub 等第三方采集 binlog/元数据 社区共识。

41 存算分离 vs 存算一体 有(存算一体:本地盘 InnoDB)

  • 经典存算一体:InnoDB 数据存本地盘 官方文档。
  • HeatWave 是 Oracle 云专属的存算分离形态,不计入开源版 社区共识。

42 多模能力 部分支持

  • JSON 类型+多值索引/虚拟列,全文索引可用 官方文档。
  • 无原生向量、图能力 官方文档。

43 FinOps 成本可观测性 不适用(自建无计费,成本=硬件+人力自理)

  • MySQL 无内置计费概念,成本是服务器、存储与运维人力。社区共识
  • 云托管版(RDS/Aurora 等)可在云账单侧用标签归因与预算告警。厂商口径

44 驱动与多语言生态 有

  • 官方 Connector/J、Connector/NET、Connector/Python、mysqlclient 官方文档。
  • ORM/工具支持度业界最广 社区共识。

45 物化视图 无

  • 无物化视图(查证为无)官方文档。
  • 汇总表+触发器/定时任务模拟,一致性自负 社区共识。

46 支持跨云 有(开源任意云,无绑定)

  • 开源版任意云/自建可部署,无厂商绑定 官方文档。
  • 各云 RDS 大同小异,迁云主要是逻辑迁移 社区共识。

47 热点数据更新能力 部分支持(行锁排队串行,无专用热点缓解机制)

  • 并发控制原语:InnoDB 行级锁(record/gap/next-key),同一行的 UPDATE 后来者排队等待持锁者提交;锁等待由 innodb_lock_wait_timeout(默认 50s)兜底,超时报 1205 错误且仅回滚当前语句,重试由应用层负责 官方文档。
  • 冲突行为:innodb_deadlock_detect 默认开启,检测到锁等待成环即回滚较小的事务(报 1213 错误,应用层重试);热点高并发下检测本身开销陡增,常见做法是关闭检测只靠超时兜底,代价是真死锁要等到超时才释放 社区共识。
  • 衰减形态:热点行是天然单点串行瓶颈,同一时刻只有一个事务能持有行锁,吞吐上限约等于锁持有时间的倒数;并发加压只会拉长排队延迟、推高死锁与超时概率 社区共识。
  • 内置缓解:未找到官方命名或文档化的热点行机制的证据,无开箱即用的热点开关;调优仅限缩短事务、调低隔离级别等通用手段 待验证。
  • 应用层模式:短事务加重试、计数器拆成 N 行求和、insert-only 建模、队列削峰;代价是业务逻辑复杂化(汇总查询、幂等补偿),且重试本身放大写压力 社区共识。

招牌能力

  1. 极成熟的生态与人才储备——驱动/ORM/监控/中间件覆盖最全,招 DBA 和排查问题的人最好找。这是 MySQL 最硬的护城河,不是技术参数。
  2. MySQL 协议是事实标准——ProxySQL、Vitess、各类网关、云厂商兼容层都先兼容 MySQL 协议;选 MySQL 等于接入整个工具宇宙。
  3. InnoDB 单机 OLTP 的低延迟与稳定性——B+Tree 聚簇索引 + MVCC + 自适应哈希,打了二十年磨出来的单机事务引擎;常规互联网 OLTP 的延迟表现是标杆。
  4. 复制/GTID/半同步/Group Replication/InnoDB Cluster 的 HA 梯度——从"主从+VIP"到官方 AdminAPI 一键搭集群,官方内置方案完整,不像某些数据库 HA 全靠第三方。
  5. Online DDL 与日常工具链——INSTANT/INPLACE 算法分级、gh-ost/pt-osc 生态、performance_schema+sys、MySQL Shell(dump/load/升级检查/AdminAPI),DBA 日常趁手。

深水区

Deep Dive 1:锁、gap/next-key 与"无辜"死锁

默认 REPEATABLE READ 下,InnoDB 用 next-key lock 防幻读。生产中最反直觉的是:两个事务插入不同键也可能死锁——因为插入要检查插入位置的 gap 是否有锁、唯一性检查要加 record lock,而两个事务加锁顺序相反即成环。监控上 SHOW ENGINE INNODB STATUS 的 LATEST DETECTED DEADLOCK 段 + performance_schema.data_locks/data_lock_waits 是标准诊断组合。应用层铁律:捕获 1213 后重试整个事务,而不是重试单条语句。降到 READ COMMITTED 能砍掉大部分 gap 锁,但唯一键冲突、外键检查、加锁顺序反转照样死锁——隔离级别不是银弹。

来源:planetscale/database-skills(deadlocks / row-locking-gotchas)社区共识;villagesql-docs 社区共识。观察版本:8.0/8.4。

Deep Dive 2:长事务、undo/purge 与大事务的"机制税"

InnoDB 的旧版本存在 undo log(8.0 起独立 undo 表空间文件),后台 purge 线程在确认无事务再可见旧版本后清理。一旦有长查询、长事务或 idle in transaction 持有老 Read View,purge 被堵住:History List Length 飙涨、undo 空间膨胀、版本链越拉越长导致读变慢、旧页挤压 buffer pool。MySQL Bug #117448 的生产报告里 HLL 达数亿,释放老事务后 purge coordinator 回读冷 undo 反成瓶颈,云盘上更严重。这是 MySQL 版的"VACUUM 阻塞"——PG 的税交在表膨胀上,MySQL 的税交在 undo/purge 上,只是位置不同。大事务另有三宗罪:超大 binlog 事件、复制延迟放大、回滚耗时与锁持有时间拉长。

来源:bugs.mysql.com #117448 社区实测;discuss.google.dev purge 讨论 社区共识。观察版本:8.0。

Deep Dive 3:异步复制延迟、GTID 切主与 read-after-write

默认异步复制下,主库提交不等待从库——这是 RPO>0 的根。GTID + 自动定位让"从库跟谁"不再靠文件名位点,但切主前必须比对 Executed_Gtid_Set,否则切过去才发现事务没到。半同步 AFTER_SYNC 用约一次 RTT 换"至少一个从库收到"的提交保证,是延迟与持久性的经典 trade-off。大事务、COPY 算法 DDL、慢查询都会把延迟峰值拉高;Seconds_Behind_Source 在从库空闲时会归零、有时钟/单线程应用盲区,严肃的延迟监控要用 heartbeat 表或 GTID 位置差。Read-after-write 的三条路:读主(主库扛不住)、sticky session(路由复杂)、WAIT_FOR_EXECUTED_GTID_SET(读延迟换一致性)——没有免费选项。

来源:percona-lab mysql-replication-ha SKILL 社区共识;planetscale replication-lag 社区共识。观察版本:8.0/8.4。

Deep Dive 4:Online DDL 与 MDL——"在线"二字的有效期

ALTER TABLE 三档算法:INSTANT(只改元数据,近乎即时)、INPLACE(后台重建,多数场景允许 DML)、COPY(全表复制,长阻塞写)。但三档在开始/提交阶段都要拿 metadata lock:一个长事务就能卡住 DDL,而排队中的 DDL 又会挡住后面所有请求——MDL 队头阻塞是生产 DDL 事故的头号形态。改列类型、字符集转换常被迫走 COPY。铁律:显式指定 ALGORITHM=INSTANT/INPLACE + LOCK=NONE,让不满足条件时失败而不是悄悄降级为阻塞。大热表用 gh-ost(依赖 binlog)或 pt-osc(依赖触发器),两者都吃 IO/复制容量,且最后的 swap 照样要 MDL。复制环境里 COPY DDL 还会堵住从库 relay 应用,造成延迟尖峰。

来源:nuggocto/dotfiles online-ddl 社区共识;villagesql zero-downtime-schema-changes 社区共识。观察版本:8.0/8.4。

Deep Dive 5:分库分表困境——MySQL 扩写的真正天花板

MySQL 原生无分片,扩写靠 Vitess/ShardingSphere/中间件。Vitess 的真实约束(多份 2026 年 skill 文档一致):

  • 跨分片 JOIN 支持但昂贵(scatter-gather / nested loop),聚合在 VTGate 内存里归并,大结果集慢;
  • 事务三档:SINGLE(拒绝跨分片)、MULTI(默认,尽力而为,顺序提交,可能部分提交)、TWOPC(原子但不隔离——隔离级别只在分片本地有效);
  • VTGate 不支持存储过程/触发器/事件、LOCK TABLES/GET_LOCK;外键支持有限,官方建议应用层保证引用完整性;
  • ID 要用 Vitess Sequence 或应用生成(UUID/雪花),否则跨分片冲突。

更深的是运维与语义双重成本:选错 shard key 是经典灾难(hash(key)%N 从 4 分片扩到 5 要搬 80% 数据,一致性哈希才只搬 1/N);reshard 是在线 VReplication 流程但依然是重操作;相关子查询跨分片可能直接失败。结论:分片把"数据库的问题"变成了"分布式系统的问题",而 MySQL 内核对此不提供任何原生帮助——这是它与 CockroachDB/TiDB 系最根本的分水岭。

来源:planetscale/database-skills vitess query-serving 社区共识;dbengines planetscale 社区共识;forge-orm SHARDING 社区共识。观察版本:Vitess v21–v24(2026)。

Deep Dive 6:可观测性的税(Performance Schema)

performance_schema + sys 是 MySQL 内建可观测的核心,默认 instrument 集生产可用。但"全开"的代价是真实的:LINE 旧实测在特定 sysbench 下全开 instrument 降 TPS 约 15%(旧版特定负载,不可推广);Percona 旧材料也有类似量级结论。生产事故时正确的节奏是平时选择性启用、救火时临时放大。另两个暗坑:慢日志阈值过低本身就是 IO 负载;EXPLAIN ANALYZE 真实执行语句,对写语句用它做诊断等于又写了一遍。

来源:LINE engineering blog 社区实测;Percona webinar 材料 社区实测。观察版本:5.6/5.7 时代实测,机制在 8.x 延续。

Deep Dive 7:TDE、密钥管理与社区/企业版边界

机制本身是扎实的:两级密钥、主密钥轮换、覆盖表空间/redo/undo/doublewrite。但生产落地的三个真相:① 社区版只有本地文件 keyring——key 文件和数据的备份必须分离存放、异地容灾,否则"加密了但 key 和数据一起丢";② binlog/relay log/审计日志加密是分别配置的,漏配等于链条断裂;③ RDS/Aurora 走云盘 KMS 而非 MySQL 原生 TDE,自建与云托管的加密责任模型不同,迁移时要重新对。TDE 防的是"硬盘被偷",不防 SQL 注入、不防删库、不防内存 dump——威胁模型要先对齐。

来源:Oracle 官方文档 innodb-data-encryption 官方文档;dev.mysql.com TDE 博客 官方文档。观察版本:8.0/8.4。

Deep Dive 8:版本线、升级与"8.0.38 式惊魂"

LTS/Innovation 双线是好设计(8.4 首个 LTS,9.7 第二个),但 8.0→8.4 升级有真实断裂点:mysql_native_password 默认禁用、expire_logs_days 等变量移除(写进配置则拒绝启动)、mysqlpump 消失、binlog 仅 ROW、TLS 1.0/1.1 移除。升级铁律:先跑 util.checkForServerUpgrade()、先升从库再升主库、升级前 innodb_fast_shutdown=0、in-place 大版本不可逆(回退靠全备或克隆 dry-run)。历史教训:2024 年 8.0.38/8.4.1/9.0.0 出现"表超 1 万张则重启后 crash 且无法再启动"的严重 bug(#115517),Percona 公开建议暂缓升级——提醒我们:LTS 不等于每个小版本都可上生产,patch 版本也要看社区反馈再跟进。

来源:villagesql mysql-80-eol-upgrade 社区共识;aws-samples RDS 升级 playbook 社区共识;thenewstack 报道 Percona advisory 社区实测。观察版本:8.0.38/8.4.1/9.0.0(2024)。

Deep Dive 9:Group Replication / InnoDB Cluster——官方 HA 的适用半径

Group Replication 的认证机制看不到 gap 锁(gap 锁信息出不了 InnoDB),多主模式官方推荐 READ COMMITTED 以对齐本地与分布式冲突检测;认证也不考虑表锁与命名锁(GET_LOCK);有事务大小上限;表必须有主键(无主键表在组内只读)。InnoDB Cluster(Shell AdminAPI + Router)官方明确:只适合局域网,跨 WAN 部署写性能明显受损;多数据中心正确姿势是 InnoDB ClusterSet(每 DC 一个 Cluster,DC 间异步复制)。手动配的异步复制通道 Cluster 不管,可能脑裂。生产经验(MySQL User Camp 分享):长事务在集群里是性能杀手,重 DDL 会打断并行应用把从节点打进 RECOVERY。

来源:Oracle 官方 Group Replication Limitations / InnoDB Cluster Limitations 官方文档;slideshare InnoDB Cluster Experience 社区实测。观察版本:8.0/8.4。


客户经验

生态 简单 OLTP 下"最不折腾周末"的运维体感

一句话
CRUD 为主、无专职 DBA 的团队里,MySQL 是"出问题时最容易救回来、升级时最不心慌"的默认选项——招牌是生态组合后的省心体感,不是单点技术突破(诚实声明)。
窄场景
中小团队(DBA 兼职或无专职)、主键点查/简单读写为主的 OLTP、TB 级以下单机可承载、更怕"半夜被叫醒"而非缺某个高级 SQL 特性的业务。
机制
thread-per-connection:连接创建成本低,无需 PgBouncer 级额外组件即可扛住较高连接数,连接风暴时行为更可预测;官方 optimizer hint(STRAIGHT_JOIN 等):优化器选错计划时 DBA 可当场"钉死"执行计划救火——PG 的 pg_hint_plan 是第三方扩展;InnoDB 聚簇主键:行数据就存在主键索引里,点查一次 I/O 拿到数据、无 heap fetch;就地升级 + 复制链滚动升级成熟(5.7→8.0 先升 replica 再逐个滚动);无 autovacuum 式"不调就半夜爆炸"的后台进程。
生产验证
GitHub:1200 台 MySQL 主机 5.7→8.0 "without dropping a single query",靠 Orchestrator(拓扑与自动 failover)、gh-ost(300+TB 在线 DDL)、freno(按 replica lag 节流)、Percona Toolkit(双链校验)(https://medium.com/@techlogstack/github-upgraded-1-200-mysql-hosts-without-dropping-a-single-query-d4c164a8a395);HN 高票评论:"mysql is a better default…ops is half of using a database",列出 autovacuum、plan pinning、聚簇索引、升级四点(https://news.ycombinator.com/item?id=38695750);Ask HN 2023 选型总结:MySQL 复制更简单可靠、官方 hint、连接扩展性(https://news.ycombinator.com/item?id=35906604);Palark:Percona Server 5.7→8.0 生产升级实录,replica-first 滚动升级全流程(https://palark.com/blog/upgrading-mysql-percona-server-from-5-7-to-8-0/)。
竞品差距
PostgreSQL 在该场景有结构性短板——autovacuum 运维面、plan pinning 无官方方案、glibc 升级可损坏 collation 顺序的数据库;TiDB/OceanBase 等分布式架构在单机简单 workload 下运维反而更重。MariaDB/Percona Server 共享同一生态红利,差距极小。
证据等级
社区共识(HN 多个高票帖,跨 2023–2024)+ 独立生产验证(GitHub 工程博客)+ 官方文档佐证
最后核验
2026-10-01

生态 在线 DDL / 零停机 schema 变更工具链(gh-ost + pt-osc)

一句话
全行业最成熟的"大表不停机改表"工具链——这是 MySQL 历史上 DDL 锁表包袱"逼出来"的生态红利。
窄场景
百 GB/亿级行大表、7×24 不能停写的生产环境、schema 随业务快速迭代的互联网公司。
机制
gh-ost(GitHub 开源):伪装成一个 replica,用 ROW 格式 binlog 事件把增量 replay 到影子表,无触发器、可暂停、可按 replica lag 自动节流;pt-online-schema-change(Percona):触发器方案,拓扑适应性更广、外键支持更好;MySQL 8.0 本体补强:ALGORITHM=INSTANT(8.0.12+,加列等元数据级操作)、原子 DDL(字典不会留一半);配套 Orchestrator(拓扑管理与自动 failover)、freno(按复制延迟节流)、pt-table-checksum/sync(主从一致性校验)。诚实注记:工具链的存在本身证明 MySQL 本体 DDL 曾是短板——招牌 = "包袱催生的生态",不是本体技术领先。
生产验证
GitHub:gh-ost 发源地,300+TB fleet 日常靠它做在线 schema 变更(https://medium.com/@techlogstack/github-upgraded-1-200-mysql-hosts-without-dropping-a-single-query-d4c164a8a395);PlanetScale:deploy request(类 PR 的 schema 变更评审流)底层就是 Vitess online DDL(gh-ost 机制)(https://github.com/druce/dbengines/blob/HEAD/engines/planetscale.md);Percona 官方文档把这套工具链列为升级的标准动作(https://github.com/percona/psmysql-docs/blob/HEAD/docs/percona-toolkit-9.7-updates.md)。
竞品差距
PostgreSQL 有 pg_repack + CREATE INDEX CONCURRENTLY,但无 gh-ost 级别"无触发器 binlog 影子表"生态,也无 deploy-request 式工作流产品;其余 31 款无同等历史包袱,也无同等工具链。没有竞品能对等替代。
证据等级
独立生产验证(GitHub 工程博客,具名工程师)+ 官方文档(Percona Toolkit)+ 社区共识
最后核验
2026-10-01

生态 Vitess 水平分片 —— "第二增长曲线"

一句话
单机 MySQL 写到头时,Vitess 是全行业生产验证最充分、应用改动最小的透明分片方案——MySQL 生态独占的"第二增长曲线"。
窄场景
单机 MySQL(主从架构)写扩展到瓶颈、业务仍是典型 OLTP 点查/短事务、不想重写应用分片逻辑、也不想换分布式数据库重构数据模型的团队。
机制
VTGate 无状态代理做查询规划与路由,应用看到的仍是"一个 MySQL";vttablet 连接复用把海量应用连接收敛为少量真实连接,顺带补上 MySQL 高并发连接短板;在线 resharding:分片数可在线增减、数据迁移近零停机;schema 变更可在所有分片后台一致应用;实现 MySQL server 协议,现有驱动/ORM/工具链基本不用改。
生产验证
竞品差距
在"不想换库、只想把现有 MySQL 分片"的窄场景下,TiDB/CockroachDB/OceanBase 等原生分布式库要求换掉整个数据库、重构数据模型与运维体系——不是替代品;Multigres(Vitess for PG)在研,PG 的复杂度让移植"多次失败"(https://github.com/multigres/site/blob/HEAD/content/blog/postgres-fm-interview.mdx)。"MySQL 协议兼容的透明分片"31 款里没有竞品。
证据等级
独立生产验证(YouTube/GitHub/Shopify 具名)+ CNCF 背书 + 社区共识。纯生态红利,与 MySQL 本体技术无关。
最后核验
2026-10-01

避坑 8.x 简单 workload 性能倒退 20–40%

一句话
MySQL 8.x 在简单 OLTP workload 下比 5.7/5.6 慢 20–40%(独立实测),叠加优化器 regression 与 utf8 历史包袱——"升级 = 变好"在这里不成立。
窄场景
简单点查/短事务为主、对升级抱有性能预期的 5.7 用户;10+ 表 JOIN、ORM 生成 SQL 的业务;历史库仍是 utf8(utf8mb3)的团队最容易中招。
机制
Percona sysbench/TPC-C 实测 MySQL 8.4 比 5.7 慢 20%;Mark Callaghan(前 Facebook MySQL 团队)回归测试:8.0.36 比 5.6 QPS 低 25–40%;Peter Zaitsev(Percona CEO)撰文称 8.x 单线程简单 workload 显著退化、功能创新乏力(https://github.com/vonng/vonng.com/blob/HEAD/content/db/mysql-is-dead/index.en.md)。8.0 的 optimizer_search_depth=0(自动)曾导致多表 JOIN planning 阶段 CPU 飙高、查询从毫秒变秒级,被社区称为"升级 8.0 后的 major regression"(https://medium.com/@jamauriceholt.com/how-we-fixed-a-major-mysql-5-7-ba9dc39b5e81)。字符集:`utf8` 实为 utf8mb3(emoji 存不下),8.0 默认 utf8mb4 才填坑;默认 collation 大小写不敏感、跨 collation JOIN 无法用索引(隐性性能悬崖)(https://github.com/sreen98/prephub/blob/HEAD/src/content/back-end/mysql-guide.md)。
生产验证
Percona 独立基准 + 前 Facebook MySQL 团队工程师回归测试 + Percona CEO 公开撰文;社区"调回参数修复"的实测记录佐证 optimizer regression 真实存在。
竞品差距
MariaDB 同场景退化小得多;PG 17 还在加功能提性能。8.0 的 SQL 功能补齐(CTE/窗口函数/直方图)未找到有分量的生产口碑——直方图需手动 ANALYZE,采用率不明。MySQL 的招牌仍在运维与生态侧,不在 SQL 表达力侧。
证据等级
独立实测(Percona 基准、Callaghan 回归测试)+ 社区共识;"Oracle 闭源担忧"属社区观点非实测
最后核验
2026-10-01

用户最买账的 5 点

1. 生态与人才:出问题时最容易找到答案和人

  • 为什么成立:MySQL 协议是事实标准,驱动/ORM/监控/中间件覆盖最全;StackOverflow、Percona 博客、中文社区沉淀了二十年踩坑记录;会调 MySQL 的 DBA/开发最好招。
  • 边界与局限:生态红利在云原生/Serverless 场景被稀释(连接模型不友好);MariaDB/Aurora 的"兼容"不等于行为一致,照搬调优经验会翻车。
  • 来源:社区共识;观察版本:8.x。

2. 单机 OLTP 低延迟:常规互联网业务的"够用且好用"

  • 为什么成立:InnoDB 聚簇索引 + MVCC + 自适应哈希,打了二十年的单机事务引擎;点查点写延迟稳定,QPS 上限靠大内存/大 NVMe 纵向扩展。
  • 边界与局限:单机有写天花板;redo 默认 100MB 对生产写负载普遍太小(innodb_redo_log_capacity 需按峰值调到 GB 级,否则 checkpoint 压力导致写抖动);大到单机装不下就必须分片,见深水区 5。
  • 来源:社区共识 + netdata/oneuptime redo sizing 指南 社区共识;观察版本:8.0.30+(redo 在线 resize)。

3. 复制 HA 梯度完整:从主从到官方集群都有现成答案

  • 为什么成立:异步复制 + GTID + 半同步 + Group Replication + InnoDB Cluster + MySQL Router,官方内置一条龙;util.checkForServerUpgrade、AdminAPI 等 Shell 工具链成熟。
  • 边界与局限:默认异步 RPO>0;Group Replication 只适合 LAN、有主键/事务大小等硬约束;切主前的 GTID 比对、延迟监控都要自己搭。
  • 来源:官方文档 + 社区共识;观察版本:8.4。

4. DDL 在线化做得早:大表变更有成熟套路

  • 为什么成立:INSTANT/INPLACE 分级 + ALGORITHM/LOCK 显式控制 + gh-ost/pt-osc 生态,大表加列/加索引不停机是标准操作。
  • 边界与局限:MDL 队头阻塞是头号 DDL 事故形态;改列类型/字符集常被迫 COPY;gh-ost 吃 binlog、pt-osc 用触发器,都有额外成本;复制环境 COPY DDL 会放大从库延迟。
  • 来源:社区共识;观察版本:8.0/8.4。

5. 可观测性内建:不用外挂就能定位大多数问题

  • 为什么成立:performance_schema + sys schema + 慢日志 + SHOW ENGINE INNODB STATUS,锁、等待、IO、复制状态一应俱全;MySQL Shell 还有升级检查等管理功能。
  • 边界与局限:全开 instrument 有可测开销(旧实测特定场景 ~15%,不可推广);慢日志阈值、长事务监控、复制延迟 heartbeat 都要主动配置——默认不包办。
  • 来源:社区实测(LINE)+ 社区共识;观察版本:8.x。

吐槽清单

#吐槽维度状态版本
1默认 REPEATABLE READ + gap/next-key 锁:不同键 INSERT 也能死锁,新手极易中招事务open(设计使然)8.x
2无行级安全(RLS),多租户隔离只能靠视图/应用层授权open8.x
3线程池插件企业版独占;默认 thread-per-connection,连接风暴下上下文切换拖垮实例性能/运维open(Percona 有免费替代)8.x
4Enterprise Audit 企业版独占;社区版合规审计只能 general log 硬扛或找第三方授权/运维open8.x
5PAM/LDAP/Kerberos 认证企业版独占授权open8.x
6原生无自动分片;扩写靠 Vitess 等中间件,跨分片事务 2PC 原子但不隔离、外键/存储过程受限扩展open8.x
7默认异步复制 RPO>0;GTID 不是零丢失保证,切主前必须人工比对运维open(半同步/GR 可缓解,有代价)8.x
8MDL 队头阻塞:一个长事务卡住 DDL,DDL 再挡住后面所有请求运维open8.x
98.0→8.4:mysql_native_password 默认禁用致老客户端断连;被移除变量写进配置则拒绝启动版本/兼容open(升级必查项)8.4
108.0.38/8.4.1/9.0.0:表超 ~1 万张则重启 crash 且无法再启动(#115517),Percona 曾公开建议暂缓升级版本fixed-in-后续小版本(以官方 release notes 为准)8.0.38/8.4.1/9.0.0
11mysqlpump 在 8.4 被移除;mysqldump 单线程,大库备份恢复慢运维partially-fixed(MySQL Shell dump/load 接替)8.4
12redo log 默认 100MB 对生产写负载普遍太小,checkpoint 压力导致写抖动性能open(8.0.30+ 支持在线调大,需手动调)8.0.30+
13长事务堵 purge → undo 膨胀、HLL 飙涨、读变慢;idle in transaction 是慢性毒药事务/运维open8.x
14Seconds_Behind_Source 有盲区(空闲归零等),延迟监控要自己搭 heartbeat可观测open8.x
15全开 Performance Schema instrument 有可测开销;可观测性要交税性能open(默认集可用,全开需谨慎)8.x
16与 MariaDB 已实质分化(GTID/系统表/优化器),"MySQL 兼容"不能互换使用兼容open8.x
17utf8mb3 包袱、字符集/排序规则历史遗留(utf8 别名变更),老库迁移要查兼容partially-fixed(8.0 默认 utf8mb4)8.x
18社区版 TDE 只有本地文件 keyring,无合规级 KMS/HSM 后端;密钥与备份分离靠自觉授权/运维open8.x

判决

适合

  • 常规互联网 OLTP:点查点写、读写比适中、单机(或纵向扩展后)能装下数据量与 QPS 的业务——这是 MySQL 的主场。
  • 生态/人才优先的团队:需要最全的工具链、最多的现成答案、最好招的 DBA/开发;以及已有 MySQL 技术栈、追求稳定少折腾的团队。
  • 云托管广泛可用:RDS/Aurora/HeatWave/自建都有成熟方案,HA 梯度(主从→半同步→InnoDB Cluster)官方内置,上手路径短。
  • 读多写少、可用从库横向扩读的场景。

不适合

  • 需要原生多地域强一致写:Group Replication 只适合 LAN,原生没有全球同步写方案;要这个去看 CockroachDB/TiDB 系。
  • 需要无中间件的水平写扩展:MySQL 扩写 = 分片中间件 + 应用改造,跨分片事务/JOIN/扩容再分片都是持续成本;写扩展是刚需且不想养 Vitess 团队的,别选。
  • 纯重 OLAP/分析:行存 InnoDB 做大扫描、复杂聚合是短板(HeatWave 是 Oracle 云上的解法,不是开源 MySQL 的)。
  • SQL 标准/复杂对象关系优先:缺 RLS、CTE/窗口函数虽有但优化器与 PG 仍有代差、JSON 能力可用但非最强;这类需求 PG 更合适。
  • 强合规但不想付费:审计、线程池、KMS 级密钥管理、LDAP 集成都在企业版墙内,社区版要么凑合要么找第三方。

迁移成本

  • from MySQL(本库内升级,8.0→8.4→9.7):低-中。LTS 线内原地升级顺滑;但 8.0→8.4 有断裂点(mysql_native_password、被移除变量、binlog 仅 ROW),必须跑 util.checkForServerUpgrade() 并做克隆 dry-run。8.0 已于 2026-04-30 EOL,留在 8.0 等于裸奔。
  • from PostgreSQL:中-高。应用层要改:无 RLS、无部分 PG 特有类型/函数、默认 RR 与 PG 的 MVCC 语义差异、序列/自增差异、大小写与引号习惯;运维层要重建:备份(pg_basebackup→XtraBackup)、复制(流复制→GTID)、监控体系。生态工具链要换血。
  • from Oracle:高。PL/SQL 几乎要重写(存储过程/包/触发器语义差异大);RAC→InnoDB Cluster 不是对等替换;商业授权模式从"买 Oracle 全家桶"变成"GPLv2 社区版免费 + 按需买 Enterprise 订阅",商务与合规流程要重走。

来源与待验证清单

来源类型用途
dev.mysql.com 官方博客(LTS/Innovation 政策)官方文档版本线、支持周期
docs.oracle.com:innodb-data-encryption、group-replication-limitations、mysql-innodb-cluster-limitations官方文档TDE、GR/Cluster 限制
dev.mysql.com/doc/mysql-shell/8.4 InnoDB Cluster Limitations官方文档Cluster LAN 限制、ClusterSet
bugs.mysql.com #117448社区实测purge/HLL 生产事故
thenewstack.io(Percona advisory)社区实测8.0.38 万表重启 crash
engineering.linecorp.com(Performance Schema 开销)社区实测可观测性税(旧版特定负载)
planetscale/database-skills(deadlocks / row-locking / replication-lag / vitess)社区共识锁、复制、Vitess 约束
percona-lab/skills mysql-replication-ha社区共识复制/GTID/切主
villagesql-docs(deadlocks / zero-downtime-schema-changes / mysql-80-eol-upgrade / backup-strategies)社区共识死锁、DDL、升级、备份
nuggocto/dotfiles online-ddl社区共识DDL 算法与 MDL
evgeniypatlan/skills mysql-to-percona社区共识企业版/社区版功能边界、Percona 替代
aws-samples RDS MySQL 升级 playbook、kiwonilee Cloud SQL 升级检查 skill、dbaoraclestar 升级迁移笔记社区共识8.0→8.4 踩坑清单
netdata/oneuptime redo log sizing 指南社区共识redo 容量调优
slideshare MyDBOPS InnoDB Cluster Experience社区实测Cluster 生产经验
endoflife-date/endoflife.date products/mysql.md、teinam/easy-rdbms release-policy社区共识版本 EOL 时间线

更新记录:2026-09-29 初版。评审基线 MySQL 8.4 LTS / 9.7 LTS。以下标 待验证:9.7 之后的日历版本号变化;官方中文文档是否存在;8.0 EOL 正式措辞(社区一致指向 2026-04-30,待官方页复核)。