MariaDB 中文社区

云厂商魔改版真相:Aurora / PolarDB / Lindorm / TDSQL

这些"兼容 MySQL/MariaDB"的产品到底改了什么、坑在哪、什么场景该用什么

云厂商喜欢把"MySQL 兼容"印在 marketing 页上。但点开看实际行为,跟上游 MySQL / MariaDB 差异可能很大。这一篇讲清楚。

一句话总结

产品是什么与上游
AWS Aurora MySQL重写存储层的 MySQL兼容 95%,存储完全不同
AWS Aurora Serverless V2Aurora + 自动伸缩同上 + ACU 计费
AWS RDS for MySQL"纯" MySQL 托管兼容 99%(小差异)
AWS RDS for MariaDB"纯" MariaDB 托管兼容 99%
阿里 PolarDB MySQL重写存储层的 MySQL兼容 95%
阿里 PolarDB-X分布式 SQL协议兼容,行为不同
阿里 RDS for MySQL"纯" MySQL99%
阿里 RDS for MariaDB"纯" MariaDB99%(版本旧)
阿里 LindormHBase + SQL 兼容协议兼容、引擎完全不同
腾讯 TDSQL for MySQL改 5.7 加分布式80%(注意)
腾讯 TDSQL-C类似 Aurora95%
腾讯 CDB for MySQL"纯" MySQL99%
华为 GaussDB(for MySQL)类似 Aurora95%
TiDB自研分布式协议兼容、SQL 子集
OceanBase蚂蚁自研分布式协议兼容
SingleStore内存 + 列存协议兼容、引擎完全不同
DorisOLAP 列存协议兼容、OLAP only
StarRocksOLAP 列存 fork of Doris同上

AWS Aurora MySQL

什么:AWS 把 MySQL InnoDB 存储层换成了分布式存储(6 副本跨 3 AZ),保留 SQL 层。

改了什么

  • 存储分布式 → 失败自动 failover < 30s
  • 写副本不阻塞主(不像传统复制)
  • Backtrack 可"时间回退"
  • Parallel Query 部分大查询自动并行
  • 计费按 IOPS + 实例

没改:SQL、客户端协议、大部分配置项。

  • binlog 默认不开,复制要手动启
  • innodb_buffer_pool_size 自动设,无法手动
  • 某些 storage 相关命令报错(OPTIMIZE TABLE 行为不同)
  • Aurora 自有函数 aws_* 系列在迁出时要改
  • Failover 主写从读切换会丢秒级 in-flight 事务(取决于副本同步)

适合:写多读多、跨 AZ 强可用、不在意 vendor lock-in。

不适合:成本敏感、需要完全开源、想用 MariaDB 特性(VECTOR/ColumnStore 等都没有)。

详见 从 Aurora 迁移

Aurora Serverless V2

什么:在 Aurora 之上加自动伸缩。按 ACU(Aurora Capacity Unit)实时计费。

  • 冷启动有延迟(数据预热)
  • 长事务可能阻止 scale down
  • 没法精细控制实例规格

适合:流量峰谷剧烈、预测困难的场景。否则成本上其实不便宜。

阿里 PolarDB for MySQL

什么:阿里版本的"Aurora"——共享存储 + 多副本。比 RDS 性能更好。

改了

  • 存储用 PolarFS 分布式文件系统
  • 主从切换秒级
  • 跨地域只读节点
  • "Cold Backup"自动归档

没改:SQL 层兼容 MySQL 8.0。

  • 跨地域延迟看物理网络
  • 控制台权限模型与 RDS 不同
  • 备份格式跟 RDS 不通用(迁移要重做)

适合:阿里云生态、性能敏感、能接受 lock-in。

适合代替 RDS for MariaDB? 通常——PolarDB MySQL 8.0 兼容性比阿里那古老的 RDS MariaDB 10.5 还更接近主流 MariaDB 11.x 用法。

阿里 PolarDB-X

什么:分布式 SQL,水平分片。

  • 跨分片 JOIN 慢甚至不支持
  • 事务跨分片用 XA / 2PC,性能差
  • 某些原生 MySQL 函数没实现

适合:单库放不下的超大业务(订单 50 亿+)。

不适合:90% 的业务——单实例 MariaDB / PolarDB 就够。

阿里 Lindorm

什么:基于 HBase + 自研引擎,兼容 MySQL 协议存储完全不同

适合

  • 海量时序数据
  • 宽稀疏表
  • 写多读少

  • SQL 子集(不支持完整 SQL)
  • 二级索引限制多
  • 跟 MySQL 客户端配合 90%,但有 SQL 报错时要查 Lindorm 文档而非 MySQL

典型场景:IoT、监控、用户行为日志。

腾讯 TDSQL for MariaDB / MySQL

什么:腾讯魔改版,基于 MariaDB 5.7 / MySQL 5.7 加了分布式 + 强一致改造。

  • 不是上游 MariaDB。某些 11.x 新功能不支持
  • 文档比腾讯 CDB 少
  • 主推方向是金融场景

适合:金融、银行、强一致跨地域。

不适合:常规 web 业务——用腾讯 CDB MySQL 反而更接近上游。

腾讯 TDSQL-C(Cynos)

什么:腾讯版本的 Aurora。计算存储分离。

:类似 Aurora,但小一些。

适合:在腾讯云想要 Aurora-like 体验。

TiDB

什么:PingCAP 出品的分布式 NewSQL协议兼容 MySQL但完全自研。

特点

  • 水平扩展无上限
  • 强一致(Raft)
  • HTAP(行存 TiKV + 列存 TiFlash)
  • 跨地域多活

  • 单点写入性能不如单机 MySQL/MariaDB
  • 某些 MySQL SQL 不支持(窗口函数有限制等)
  • 部署运维复杂
  • 优化器和 MySQL/MariaDB 不同,老经验不一定适用

适合

  • 单库放不下、要水平扩展
  • HTAP(实时分析 + 在线交易)
  • 多活 / 跨地域强一致

OceanBase

什么:蚂蚁自研分布式数据库,Paxos 多副本强一致,协议兼容 MySQL

适合:金融、超大规模、能接受厂商定价。社区版功能完整。

  • MySQL 兼容性逐版本提高,但与上游仍有差异
  • 部署运维门槛高

SingleStore(MemSQL)

什么:内存 + 列存 + 行存混合,协议兼容 MySQL

特点:内存表行存做 OLTP,列存做 OLAP,单库混合。

适合:超低延迟混合负载、向量检索(强项)。

:商业产品,不便宜。

Doris / StarRocks

OLAP only。协议兼容 MySQL 但不能当 OLTP用——单行更新慢、事务弱。

适合:替代 ClickHouse 做实时数仓。

选型决策树

我的诉求是什么?
├─ OLTP,单库容量 < 数 TB
│  ├─ 想用 MariaDB 11.x 新特性 → 自建 / SkySQL
│  ├─ 性能 / 高可用 / 不在乎 lock-in → Aurora / PolarDB / TDSQL-C
│  └─ 想要最接近上游 + 托管 → AWS RDS for MariaDB / 腾讯 CDB
├─ OLTP,单库 > 数 TB
│  ├─ 全球多活 → TiDB / Aurora Global
│  ├─ 金融强一致 → OceanBase / TDSQL
│  └─ 国内简单分片 → PolarDB-X
├─ OLAP / 数仓
│  ├─ 想跟 OLTP 一个 server → MariaDB ColumnStore
│  ├─ 独立数仓 → Doris / StarRocks / ClickHouse
│  └─ 内存级超低延迟 → SingleStore
├─ 时序 / IoT
│  └─ Lindorm / TimescaleDB / TDengine
└─ 向量 RAG
   ├─ 已有 MariaDB 11.8+ → 用原生 VECTOR(见 [RAG with VECTOR](/docs/ai/rag-with-vector))
   ├─ 想极速 → SingleStore / Qdrant
   └─ 想免运维 → Pinecone

兼容性测试方法

迁过去前,跑:

pt-upgrade source-conn target-conn --queries=production.log

可以对比两端跑同样查询的结果是否一致。

一句话忠告

"MySQL 兼容"≠"能 drop-in 替换"。任何"魔改版"都要测自己业务的关键路径。

延伸

本页目录