数据库作为应用系统的核心资产,其数据安全至关重要。与 MySQL 和 PostgreSQL 不同,MongoDB 作为一款分布式 NoSQL 数据库,其高可用架构本身降低了对备份的绝对依赖,因此官方主要提供逻辑备份与恢复方案。
逻辑备份工具:mongodump
如果你通过 yum 等包管理器安装 MongoDB,通常会自动包含 mongodump 和 mongorestore 工具。但如果采用二进制方式部署,则需要单独下载 MongoDB 数据库工具包,解压后将其路径添加到系统 PATH 环境变量中即可使用。
mongodump 命令功能强大,支持多种备份场景,其常用参数示例如下:
# 备份整个实例(默认跳过 local 和 config 库)
mongodump --host localhost --port 27017 --out /backup/mongodb/
# 备份指定数据库
mongodump --db mydb --out /backup/mongodb/
# 备份指定集合
mongodump --collection mycollection --db mydb --out /backup/mongodb/
# 使用用户名密码认证
mongodump --username admin --password password --authenticationDatabase admin
# 启用 gzip 压缩备份,节省存储空间
mongodump --gzip --out /backup/mongodb/
# 指定查询条件进行部分备份(例如备份特定时间后的数据)
mongodump --query '{"date": {"$gt": {"$date": "2023-01-01T00:00:00Z"}}}'
在实际操作中,备份整个实例会生成类似如下的输出,可以看到它自动跳过了系统库:
mongodump --host localhost --port 27017 --out /backup/mongodb/
2025-12-24T23:42:02.907+0800 writing admin.system.users to /backup/mongodb/admin/system.users.bson
2025-12-24T23:42:02.925+0800 done dumping admin.system.users (4 documents)
2025-12-24T23:42:02.925+0800 writing admin.system.version to /backup/mongodb/admin/system.version.bson
2025-12-24T23:42:02.926+0800 done dumping admin.system.version (2 documents)
2025-12-24T23:42:02.926+0800 writing abcd.users to /backup/mongodb/abcd/users.bson
2025-12-24T23:42:02.926+0800 writing test.demo to /backup/mongodb/test/demo.bson
2025-12-24T23:42:02.938+0800 done dumping abcd.users (1 document)
2025-12-24T23:42:02.948+0800 done dumping test.demo (1 document)
如果需要备份 local 库(例如包含副本集或分片集群的元数据),必须显式指定数据库名:
mongodump --host localhost --port 27017 --db local --out /backup/mongodb/
2025-12-24T23:45:48.110+0800 writing local.startup_log to /backup/mongodb/local/startup_log.bson
2025-12-24T23:45:48.112+0800 done dumping local.startup_log (14 documents)
逻辑恢复工具:mongorestore
与备份相对应,mongorestore 命令用于将 mongodump 生成的 BSON 数据文件恢复到 MongoDB 实例中。它是保障数据库数据可恢复性的关键工具。
# 恢复整个备份目录到目标实例
mongorestore --host localhost --port 27017 /backup/mongodb/
# 恢复指定数据库
mongorestore --db mydb /backup/mongodb/mydb/
# 恢复指定集合
mongorestore --collection mycollection --db mydb /backup/mongodb/mydb/mycollection.bson
# 恢复前先删除目标集合(覆盖模式)
mongorestore --drop /backup/mongodb/
# 恢复 gzip 压缩格式的备份
mongorestore --gzip /backup/mongodb/
# 将数据恢复到不同名称的数据库中(常用于数据迁移或测试)
mongorestore --nsFrom 'mydb.*' --nsTo 'mydb_restore.*' /backup/mongodb/
一个典型的恢复过程会输出详细的日志,显示正在准备元数据、删除现有集合(如果使用了 --drop 参数)、恢复文档以及重建索引等步骤。

图1:使用 mongorestore 命令执行恢复操作的终端输出示例
掌握 mongodump 和 mongorestore 是每一位 MongoDB 运维工程师的基本功。合理规划备份策略并定期演练恢复流程,才能真正确保在数据丢失或损坏时能够从容应对。更多关于数据库和中间件的深度内容,欢迎在 云栈社区 交流探讨。
|