第 47.1 节:术语澄清
“MySQL 集群”一词需要区分以下几种含义:
- NDB 集群:一种专门的、主要基于内存的存储引擎。使用并不广泛。
- Galera 集群(又名 Percona XtraDB Cluster / PXC / MariaDB with Galera):一种非常优秀的高可用性解决方案,超越了传统的复制功能。
请参阅关于这些“集群”变体的单独页面。
有关“聚簇索引”(clustered index),请参阅关于 PRIMARY KEY 的章节。
第 47.2 节:关于“聚簇索引”与 MyISAM/InnoDB 的本质区别
“聚簇索引(Clustered Index)”是理解 MySQL 存储引擎差异的分水岭:
- InnoDB(聚簇索引):数据直接挂在主键索引的叶子节点上。这意味着表数据本身就是按主键排序存储的,所以 InnoDB 必须有主键,且二级索引查询需要回表。
- MyISAM(非聚簇索引):数据和索引完全分离(
.MYD和.MYI文件)。索引叶子节点存的是物理行地址(指针),数据和主键之间没有强制捆绑关系。因此 MyISAM 允许没有主键,且索引结构相对“轻量”。
第 47.3 节:关于你列出的“集群”术语,实际使用中的冷知识
- NDB 集群:它是内存导向的。但它的锁机制极其特殊(表级分区锁,甚至有时是全局锁),且不支持外键。它和
MyISAM一样不支持事务(尽管 NDB 有部分事务支持,但与传统 ACID 差异很大),所以在绝大多数常规业务中被淘汰。 - Galera / PXC:它是目前唯一能完美替代传统主从复制的 多主写入 方案。但有个硬性约束:它强烈依赖 InnoDB 引擎。如果你的表是
MyISAM,在 Galera 集群中同步时会触发报错(因为 MyISAM 无法实现写集验证 / 冲突检测),这往往是新手搭建 PXC 集群失败的首要原因。