MongoDB在CentOS中的数据恢复方法有哪些
导读:MongoDB 在 CentOS 的数据恢复方法 一、常用恢复方法概览 mongorestore 逻辑恢复:从 mongodump 生成的 BSON 备份恢复,支持全库、单库、单集合,适合跨版本迁移与选择性恢复。 文件级物理恢复:将 /v...
MongoDB 在 CentOS 的数据恢复方法
一、常用恢复方法概览
- mongorestore 逻辑恢复:从 mongodump 生成的 BSON 备份恢复,支持全库、单库、单集合,适合跨版本迁移与选择性恢复。
- 文件级物理恢复:将 /var/lib/mongo(WiredTiger 数据文件)与必要文件拷回数据目录,适用于实例级快速回滚;操作前建议备份现有数据目录。
- WT 工具修复与手工替换:借助 WiredTiger wt 工具对损坏的 WT 文件进行 salvage,再导入或 repair,适合极端损坏场景。
- mongoimport 导入 JSON/CSV:从 mongoexport 导出的 JSON/CSV 恢复,适合小体量或特定集合的结构化数据迁移。
- 崩溃/损坏后的 repair 修复:使用 mongod --repair 尝试修复数据一致性,再重启服务验证。
二、操作步骤与示例
-
mongorestore 逻辑恢复(推荐)
- 全库恢复
mongorestore -u < user> -p < password> --authenticationDatabase admin /path/to/dump/ - 指定库恢复
mongorestore -u < user> -p < password> --authenticationDatabase admin /path/to/dump/< dbname> - 指定集合恢复
mongorestore -u < user> -p < password> --authenticationDatabase admin /path/to/dump/< dbname> /< collname> .bson - 常用选项:–drop(恢复前删除同名集合,谨慎使用)、–host/–port、–nsInclude/–nsExclude 做命名空间过滤。
- 全库恢复
-
文件级物理恢复(拷贝数据文件)
- 建议先停库并备份现有数据目录:
sudo systemctl stop mongod sudo cp -R /var/lib/mongo /var/lib/mongo_backup_$(date +%F_%T) - 将备份的数据目录拷回(确保与当前 storage.dbPath 一致):
sudo cp -R /path/to/backup/mongo /var/lib/mongo sudo chown -R mongod:mongod /var/lib/mongo sudo systemctl start mongod sudo systemctl status mongod - 注意:版本需兼容;WiredTiger 存储引擎下直接替换文件风险较高,务必有可用备份。
- 建议先停库并备份现有数据目录:
-
WT 工具修复与手工替换(极端损坏场景)
- 安装 WiredTiger 工具(示例版本,需与实例 WT 版本匹配):
sudo yum install -y epel-release libtool automake snappy snappy-devel lz4 lz4-devel zstd zstd-devel zlib zlib-devel git make gcc-c++ cd /opt wget http://source.wiredtiger.com/releases/wiredtiger-2.7.0.tar.bz2 bunzip2 wiredtiger-2.7.0.tar.bz2 cd wiredtiger-2.7.0 sh autogen.sh ./configure --enable-snappy make & & sudo make install - 基本流程:
- 启动一个临时实例指向新目录(如 /data/mongo-bak);
- 预先创建同名集合以生成对应 collection-*.wt 文件;
- 用备份的 WT 文件替换新实例对应文件;
- 使用 wt 工具对损坏文件执行 salvage:
wt -C "extensions=[/opt/wiredtiger-2.7.0/ext/compressors/snappy/.libs/libwiredtiger_snappy.so]" salvage file:< wt-file> - 完成后执行 repair 并校验:
mongod --dbpath /data/mongo-bak --repair mongo > db.< coll> .validate({ full: true} )
- 风险提示:WT 直接操作有数据丢失风险,务必在完整备份前提下进行。
- 安装 WiredTiger 工具(示例版本,需与实例 WT 版本匹配):
-
mongoimport 导入 JSON/CSV(小体量/结构化数据)
- 恢复集合(JSON 示例):
mongoimport -h < host> -u < user> -p < password> --authenticationDatabase admin \ --db < dbname> --collection < collname> --file /path/to/file.json - 恢复集合(CSV 示例,需指定字段):
mongoimport -h < host> -u < user> -p < password> --authenticationDatabase admin \ --db < dbname> --collection < collname> --type=csv --headerline --file /path/to/file.csv - 适合从 mongoexport 导出的 JSON/CSV 迁移到现有或新库。
- 恢复集合(JSON 示例):
-
崩溃/损坏后的 repair 修复
- 停库后执行修复:
sudo systemctl stop mongod mongod --dbpath /var/lib/mongo --repair sudo systemctl start mongod sudo systemctl status mongod - 修复会重建索引并尝试一致性修复,可能耗时较长,修复后建议做全量校验。
- 停库后执行修复:
三、方法选择建议
- 有 mongodump 备份:优先用 mongorestore,灵活、安全、可选择性恢复。
- 无逻辑备份但磁盘文件完好:可尝试文件级物理恢复,务必先备份当前数据目录。
- 文件级损坏严重:在完整备份前提下,使用 WT 工具 salvage 后 repair。
- 仅需迁移少量集合或跨系统交换数据:使用 mongoimport/export 的 JSON/CSV。
- 实例异常但数据目录可访问:先 –repair 再验证数据完整性。
四、注意事项
- 恢复前务必对当前实例与数据目录做完整备份(如复制 /var/lib/mongo 到安全位置)。
- 使用 –drop 会先删除目标集合,可能造成数据覆盖,务必确认目标库/集合为空或不重要。
- 认证与权限:如使用 SCRAM 认证,提供 –username/–password 与 –authenticationDatabase admin。
- 版本兼容:逻辑恢复(mongorestore)通常跨小版本更稳妥;物理恢复与 WT 工具需版本匹配。
- 恢复后执行校验:如 db..validate({ full: true} ),并抽样查询确认数据一致。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: MongoDB在CentOS中的数据恢复方法有哪些
本文地址: https://pptw.com/jishu/772114.html
