Ubuntu 上 MariaDB 存储引擎选择指南
快速决策
- 通用在线业务(Web/API/后台管理):优先选用 InnoDB。它支持 ACID 事务、行级锁、MVCC、外键,具备崩溃恢复与热备份能力,是 MariaDB 10.2 及以后的默认引擎,适合高并发读写与数据一致性要求高的场景。对于 MariaDB 10.1 及更早版本,常用 XtraDB 作为增强版 InnoDB 的首选。
- 只读或读多写少、追求极致读取速度且可接受无事务与弱一致性:可选 Aria(MariaDB 对 MyISAM 的现代化改进,支持崩溃安全恢复与页级校验),一般不再推荐使用 MyISAM(不支持事务、表级锁、崩溃后恢复能力弱)。
- 写入密集且超出内存容量、需要更高压缩率与 I/O 效率:考虑 MyRocks(RocksDB LSM,压缩率高、写放大低)或 TokuDB(高压缩、适合大表与写密集型)。
- 归档与审计日志(只追加、极少查询):使用 Archive(仅支持 INSERT/SELECT,高效压缩存储)。
- 临时计算/缓存/会话表:使用 MEMORY(数据驻内存、速度快,但崩溃丢失、仅表级锁,且不支持 TEXT/BLOB)。
- 跨源查询与联邦访问:使用 CONNECT(SQL/MED,统一访问 CSV、远程 MariaDB/MySQL 等外部数据)。
- 全文检索(尤其是 CJK):使用 Mroonga(列存全文,检索性能优异)。
- 大规模并行分析(OLAP/数据仓库):使用 ColumnStore(列式、分布式 MPP 架构,适合 PB 级数据)。
- 多主同步与横向扩展:采用 Galera Cluster(同步多主,通常仍搭配 InnoDB 使用)。
场景与引擎对照表
| 场景 |
推荐引擎 |
关键理由 |
注意点 |
| 通用事务型应用 |
InnoDB |
事务、行锁、MVCC、外键、崩溃恢复、热备 |
合理设置缓冲池等参数 |
| 只读/报表(非事务) |
Aria |
比 MyISAM 更现代、支持崩溃恢复 |
仍无事务与行级锁 |
| 写密集/超大数据量 |
MyRocks / TokuDB |
高压缩、低写放大、适合大表 |
需评估版本支持与运维经验 |
| 历史归档/日志 |
Archive |
只追加、高压缩、存储成本低 |
查询能力有限 |
| 临时表/缓存 |
MEMORY |
内存速度、会话级缓存 |
断电丢失、表级锁、无 TEXT/BLOB |
| 跨源/联邦查询 |
CONNECT |
统一访问外部数据(CSV/远程表) |
网络与权限配置 |
| 全文检索(CJK) |
Mroonga |
列存全文、检索快 |
需安装插件 |
| 分析型(OLAP) |
ColumnStore |
列式、MPP、适合大数据 |
导入与更新模式不同 |
| 多主高可用 |
Galera |
同步多主、强一致 |
冲突处理与网络要求高 |
在 Ubuntu 上如何查看与设置
- 查看与切换引擎
- 查看已启用引擎与默认引擎:
SHOW ENGINES;
SELECT @@global.storage_engine;
- 建表时指定引擎:
CREATE TABLE t(id INT PRIMARY KEY) ENGINE=InnoDB;
- 修改已有表引擎:
ALTER TABLE t ENGINE=InnoDB;
- 配置文件设置默认引擎(/etc/mysql/my.cnf 或 /etc/my.cnf.d/*.cnf):
[mysqld]
default_storage_engine=InnoDB
- 版本差异要点
- MariaDB 10.2+:默认引擎为 InnoDB。
- MariaDB 10.1:默认引擎为 XtraDB(InnoDB 的增强分支)。
- 系统表从 MariaDB 10.4 起默认使用 Aria。
- 常用运维检查
- 查看库/表引擎:SHOW TABLE STATUS FROM db; / SHOW CREATE TABLE t;
- 安装插件类引擎(如 CONNECT/Mroonga/ColumnStore)后,需确认插件已启用再建表使用。
常见误区与建议
- 不要在新项目中使用 MyISAM,优先 InnoDB;如为历史表,可逐步迁移至 Aria/InnoDB。
- MEMORY 适合短期/会话级缓存,不作为长期持久化方案。
- 需要高压缩与写入吞吐时再考虑 MyRocks/TokuDB,并充分测试版本兼容与运维工具链。
- 全文检索优先考虑 Mroonga(CJK 场景),避免用 InnoDB 全文检索替代专用引擎。
- 分析型负载与事务型负载分离,OLAP 建议使用 ColumnStore 或专用数据仓库方案。