在单台 MySQL 服务器上,理论上可以创建的数据库数量没有硬性限制,但实际数量受限于以下几个因素:
1. 操作系统限制
- 文件系统限制:每个 MySQL 数据库在磁盘上通常对应一个目录(位于
datadir下),而操作系统对单个目录中的子目录数量有限制。- 例如,在 ext4 文件系统中,单个目录最多可容纳约 65,000 个子目录(除非启用 dir_index 特性,可支持更多)。
- 文件句柄数限制:每个数据库和表都会占用文件句柄,操作系统的最大打开文件数(
ulimit -n)会影响并发能力。
2. MySQL 配置与性能影响
- 虽然 MySQL 本身不限制数据库数量,但:
- 每个数据库都可能包含多个表,大量数据库会增加元数据管理开销。
information_schema查询可能变慢。- 启动时间变长(MySQL 需要扫描所有数据库目录)。
- 内存使用增加(如 table cache、metadata locks 等)。
3. 实际建议
- 虽然技术上可以创建成千上万个数据库,但一般不推荐超过几百到几千个,具体取决于:
- 服务器硬件资源(CPU、内存、磁盘 I/O)
- 每个数据库的活跃程度
- 维护复杂度(备份、权限管理等)
示例:查看当前数据库数量
SELECT COUNT(*) FROM information_schema.SCHEMATA;
总结
| 项目 | 说明 |
|---|---|
| 理论上限 | 无硬性限制 |
| 实际限制 | 文件系统、性能、维护复杂度 |
| 推荐数量 | 数百至数千(视场景而定) |
⚠️ 常见用途如多租户系统中使用“一租户一库”模式时,应评估是否改用“一租户一表”或分库分表方案以提升可维护性和性能。
如果你有具体的使用场景(如 SaaS 多租户),可以进一步优化架构设计。
云小栈