mongodump与mongorestore
mongodump和mongorestore是MongoDB官方提供的两个实用工具,用于数据库的备份和恢复操作。它们支持全量或部分数据导出/导入,适用于数据迁移、灾难恢复等场景。
mongodump的基本用法
mongodump用于从MongoDB实例导出数据到BSON文件。基本命令格式如下:
mongodump --uri="mongodb://username:password@host:port/database" --out=/path/to/output
常用参数说明:
--uri
:连接字符串--out/-o
:输出目录--db
:指定数据库--collection
:指定集合--query
:使用JSON查询过滤数据--gzip
:压缩输出
示例1:备份整个实例
mongodump --host=127.0.0.1 --port=27017 --out=/backups/mongodump-2023-11-20
示例2:备份特定集合
mongodump --db=test --collection=users --out=/backups/partial
mongorestore的基本用法
mongorestore用于将mongodump生成的BSON文件导入到MongoDB中:
mongorestore --uri="mongodb://username:password@host:port" /path/to/dump
关键参数:
--drop
:在恢复前删除现有集合--nsInclude
:指定命名空间模式--noIndexRestore
:不恢复索引--gzip
:解压恢复
示例3:完整恢复
mongorestore --host=cluster.example.com --port=27017 --username=admin --password=secret /backups/mongodump-2023-11-20
高级使用技巧
增量备份方案
结合查询条件实现增量备份:
# 备份最近24小时的数据
mongodump --db=logs --collection=events \
--query='{ "timestamp": { "$gt": { "$date": "2023-11-19T00:00:00Z" } } }' \
--out=/backups/incremental
使用通配符恢复特定集合
mongorestore --nsInclude='test.users' /backups/full-dump
跨版本兼容性处理
当源和目标MongoDB版本不一致时:
mongodump --host=old-server:27017 --db=production \
--readPreference=secondaryPreferred \
--out=/backups/cross-version
实际应用场景
数据迁移案例
将生产环境数据迁移到测试环境:
# 生产环境导出
mongodump --uri="mongodb://prod-user:password@prod-cluster:27017/prod-db" \
--gzip --out=/backups/prod-export
# 测试环境导入
mongorestore --uri="mongodb://test-user:password@test-cluster:27017/test-db" \
--drop --gzip /backups/prod-export
定时备份脚本示例
Node.js实现的自动备份脚本:
const { exec } = require('child_process');
const cron = require('node-cron');
const path = require('path');
const fs = require('fs');
const BACKUP_DIR = '/mnt/backups/mongo';
const CONN_STR = 'mongodb://admin:password@localhost:27017';
function runBackup() {
const date = new Date().toISOString().split('T')[0];
const backupPath = path.join(BACKUP_DIR, date);
if (!fs.existsSync(backupPath)) {
fs.mkdirSync(backupPath, { recursive: true });
}
exec(`mongodump --uri="${CONN_STR}" --gzip --out="${backupPath}"`,
(error, stdout, stderr) => {
if (error) {
console.error(`Backup failed: ${error.message}`);
return;
}
console.log(`Backup completed to ${backupPath}`);
});
}
// 每天凌晨2点执行
cron.schedule('0 2 * * *', runBackup);
性能优化建议
- 并行恢复:对大型数据库拆分集合并行恢复
# 并行恢复多个集合
mongorestore --numParallelCollections=4 /backups/large-dump
-
网络优化:在本地网络使用
--compressors=snappy
-
内存调整:大数据量恢复时增加批处理大小
mongorestore --batchSize=1000 /backups/huge-dump
常见问题解决
认证失败处理
当遇到认证错误时,检查连接字符串格式:
# 正确格式
mongodump --uri="mongodb://user:pass@host:port/db?authSource=admin"
# 错误示例(缺少authSource)
mongodump --uri="mongodb://user:pass@host:port/db"
版本兼容性问题
使用--forceTableScan
解决索引问题:
mongodump --db=legacy --forceTableScan --out=/backups/legacy-data
大集合处理技巧
对于超过100GB的集合:
# 拆分备份
mongodump --db=bigdata --collection=huge_collection \
--query='{ "_id": { "$lt": ObjectId("...") } }' \
--out=/backups/part1
本站部分内容来自互联网,一切版权均归源网站或源作者所有。
如果侵犯了你的权益请来信告知我们删除。邮箱:cc@cccx.cn
上一篇:备份策略(逻辑备份、物理备份)
下一篇:文件系统快照备份