Files
CmiiDeploy/6-厦门移动-4.1.0/清除mongo-db的磁盘空间.sh
zeaslity d8e2c67e36 123
2025-03-14 13:48:54 +08:00

85 lines
7.7 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

### 调查报告
#### 引言
本文详细探讨了如何在不影响 MongoDB 实际数据的情况下,通过删除文件来释放存储空间。基于用户提供的文件列表,我们分析了每个文件的用途,并提供了安全删除的建议。这份报告旨在为用户提供全面的指导,同时强调手动操作的风险,并推荐更安全的替代方法。
#### 文件分析与分类
用户提供的文件列表包括多种类型的文件,如 `WiredTiger.wt``collection-*``index-*` 等。这些文件是 MongoDB 使用 WiredTiger 存储引擎时的数据目录中的典型组成部分。以下是详细分析:
- **实际数据文件**
- `collection-*` 文件(如 `collection-0-1702428478038935225.wt`)存储集合中的文档数据。删除这些文件将导致数据丢失,因此绝对不能删除。
- 示例:`collection-0--1757014832397380742.wt``collection-4--3349146543354658687.wt`
- **索引文件**
- `index-*` 文件(如 `index-5-1702428478038935225.wt`)存储集合的索引。删除这些文件不会影响实际数据,但会移除索引,可能显著降低查询性能,尤其是对于复杂的查询。
- 示例:`index-0--3349146543354658687.wt``index-6--3597060289595503483.wt`
- 研究表明,索引文件的大小可能占数据目录的很大一部分,删除它们可以释放显著的空间,但需要权衡性能影响。
- **元数据和核心文件**
- `WiredTiger.wt` 是数据库的主要元数据文件,存储所有表的配置和检查点信息。删除它会导致数据库无法启动,绝对不能删除。
- `WiredTigerHS.wt` 是事务历史存储文件,用于支持事务完整性,删除可能导致事务相关问题。
- `_mdb_catalog.wt` 是目录文件,包含数据库的元数据,删除会导致数据库不可用。
- `sizeStorer.wt` 存储大小信息,删除可能会影响空间管理,启动时可能出错。
- **锁文件**
- `WiredTiger.lock``mongod.lock` 是锁文件,用于防止多个实例同时访问数据库。手动删除可能导致数据损坏,不建议删除。
- **日志和临时文件**
- `journal` 文件用于写前日志,确保崩溃恢复时的数据一致性。删除它们风险很高,可能导致数据丢失或不一致,不建议手动操作。
- `_tmp` 文件是临时文件,通常用于操作过程中。如果数据库当前未运行或没有正在进行的操作,删除它们可能是安全的。
- `diagnostic.data` 文件包含诊断信息(如服务器状态的二进制格式),用于故障排查。删除它不会影响数据,但可能会影响未来的问题诊断。
- **不明文件**
- `storage.bson` 在标准 MongoDB 数据目录中不常见,可能是用户自定义文件或备份文件。未经确认用途,不建议删除,以免影响数据。
#### 安全删除的建议
基于上述分析,以下是可以在不影响实际数据的情况下考虑删除的文件:
- **`diagnostic.data`**:这是诊断信息文件,不包含实际数据,删除是安全的。如果空间紧张且不需要诊断信息,可以删除。
- **`_tmp` 文件**:这些是临时文件,如果数据库未运行或确认没有正在进行的操作,可以删除。但需注意,删除过程中可能影响正在进行的操作。
#### 删除索引文件的权衡
如果需要更多空间,可以考虑删除 `index-*` 文件,但需注意以下几点:
- 删除索引文件会移除对应的索引,这不会影响实际数据(文档),但会显著降低查询性能,尤其是依赖索引的查询。
- 示例文件:`index-5--3349146543354658687.wt``index-8--3597060289595503483.wt`
- 建议:如果某些索引不再需要(例如,开发环境或不再使用的查询),可以删除对应的文件。但在生产环境中,建议先评估性能影响。
#### 不建议删除的文件
以下文件不建议删除,因为它们对数据库的正常运行至关重要:
- `collection-*` 文件:包含实际数据,删除会导致数据丢失。
- `WiredTiger.wt``WiredTigerHS.wt``sizeStorer.wt`:这些是核心元数据和历史文件,删除会导致数据库无法启动或数据不一致。
- `journal` 文件:用于崩溃恢复,删除可能导致数据丢失。
- `WiredTiger.lock``mongod.lock`:锁文件,删除可能导致多实例访问冲突。
#### 替代方法:使用 `compact` 命令
手动删除文件存在风险,推荐使用 MongoDB 的 `compact` 命令来安全回收空间。该命令会重写数据和索引,释放未使用的磁盘空间,尤其适合 WiredTiger 存储引擎。操作步骤如下:
1. 连接到 MongoDB 实例,使用 `mongosh`
2. 对每个集合运行 `db.collection.compact()`,例如 `db.myCollection.compact()`
3. 注意:`compact` 操作需要额外的磁盘空间(约 2GB并会锁定数据库建议在维护窗口期间执行。
有关详细信息,请参考 [MongoDB 官方文档](https://www.mongodb.com/docs/manual/tutorial/compact-collections/)
#### 风险与注意事项
- **手动删除的风险**MongoDB 的文件系统高度集成,删除错误文件可能导致数据库损坏或数据丢失。建议在操作前备份所有文件。
- **诊断信息的重要性**`diagnostic.data` 文件虽然可以删除,但如果未来需要排查问题,可能会缺少关键信息。
- **性能影响**:删除索引文件会影响查询性能,建议在删除前评估业务需求。
#### 表格:文件类型与删除建议
| 文件类型 | 示例文件 | 包含内容 | 是否可以删除 | 影响 |
|-------------------|-----------------------------------|------------------------------|--------------------|--------------------------|
| 集合数据文件 | `collection-0-1702428478038935225.wt` | 实际文档数据 || 数据丢失 |
| 索引文件 | `index-5-1702428478038935225.wt` | 索引数据 | 是(谨慎) | 查询性能下降 |
| 元数据文件 | `WiredTiger.wt` | 数据库配置和检查点 || 数据库无法启动 |
| 历史存储文件 | `WiredTigerHS.wt` | 事务历史 || 事务完整性问题 |
| 临时文件 | `_tmp` | 临时操作数据 | 是(数据库未运行时)| 可能影响正在进行的操作 |
| 诊断文件 | `diagnostic.data` | 服务器状态信息 || 未来诊断可能困难 |
| 日志文件 | `journal` | 写前日志,用于崩溃恢复 || 数据不一致或丢失 |
| 锁文件 | `WiredTiger.lock` | 防止多实例访问 || 数据损坏风险 |
| 大小存储文件 | `sizeStorer.wt` | 空间大小信息 || 启动可能失败 |
| 不明文件 | `storage.bson` | 未知,可能是自定义文件 | 否(未经确认) | 可能影响数据 |
#### 结论
为了释放空间,建议首先删除 `diagnostic.data``_tmp` 文件,这些操作相对安全,不会影响实际数据。如果需要更多空间,可以考虑删除 `index-*` 文件,但需权衡性能影响。强烈建议避免手动删除 `journal` 文件和其他核心文件,并优先使用 `compact` 命令来安全回收空间。