生成测试数据
bash
复制代码
(1)创建测试数据,创建备份文件存放目录
mkdir /data/backup
(2)创建订单表
use product
for(i = 1; i <= 1000; i++) {
db.order.insertOne({
"order_id": "ORD" + i,
"customer": "用户" + (i % 50 + 1),
"amount": Math.floor(Math.random() * 1000 + 100),
"status": ["待付款", "已付款", "已发货", "已完成", "已取消"][Math.floor(Math.random() * 5)],
"create_time": new Date()
});
}
(3)创建用户信息表
use user
for(i = 1; i <= 1000; i++) {
db.userinfo.insertOne({
"user_id": i,
"username": "user" + i,
"age": Math.floor(Math.random() * 50 + 18), // 18-67岁
"email": "user" + i + "@example.com",
"register_date": new Date(2023, Math.floor(Math.random() * 12), Math.floor(Math.random() * 28 + 1))
});
}
1.备份工具mongodump
1.1 选项说明
| 分类 |
选项 |
描述 |
| 常规选项 |
--help |
打印使用说明 |
|
--version |
打印工具版本并退出 |
|
--config= |
配置文件路径 |
| 详细级别选项 |
-v, --verbose= |
更详细的日志输出(可多次使用增加详细程度,如-vvvvv,或指定数值如--verbose=N) |
|
--quiet |
隐藏所有日志输出 |
| 连接选项 |
-h, --host= |
要连接的MongoDB主机(副本集使用setname/host1,host2格式) |
|
--port= |
服务器端口(也可使用--host hostname:port格式) |
| 认证选项 |
-u, --username= |
认证用户名 |
|
-p, --password= |
认证密码 |
|
--authenticationDatabase= |
存储用户凭据的数据库 |
|
--authenticationMechanism= |
使用的认证机制 |
|
--awsSessionToken= |
通过AWS IAM认证的会话令牌 |
| 命名空间选项 |
-d, --db= |
要使用的数据库 |
|
-c, --collection= |
要使用的集合 |
| URI选项 |
--uri=mongodb-uri |
MongoDB URI连接字符串 |
| 查询选项 |
-q, --query= |
查询过滤器,v2扩展JSON字符串,如'{"x":{"$gt":1}}' |
|
--queryFile= |
包含查询过滤器文件路径(v2扩展JSON) |
|
--readPreference= |
|
|
--forceTableScan |
强制表扫描(不使用$snapshot或提示_id)。已弃用,因为这是WiredTiger的默认行为 |
| 输出选项 |
-o, --out= |
输出目录,或'-'表示标准输出(默认:'dump') |
|
--gzip |
使用Gzip压缩存档或集合输出 |
|
--oplog |
在非分片集群的副本集上进行时间点快照 |
|
--archive= |
转储为存档到指定路径。如果指定标志但无值,存档将写入标准输出 |
|
--dumpDbUsersAndRoles |
转储指定数据库的用户和角色定义 |
|
--excludeCollection= |
要从转储中排除的集合(可多次指定以排除更多集合) |
|
--excludeCollectionsWithPrefix= |
从转储中排除具有给定前缀的所有集合(可多次指定以排除更多前缀) |
|
-j, --numParallelCollections= |
并行转储的集合数量 |
|
--viewsAsCollections |
将视图作为普通集合转储其生成的数据,忽略标准集合 |
1.2 例子
1.2.1 全库备份
bash
复制代码
[root@MongoDB-01 ~]# mongodump -uroot -p123 --port 27017 --authenticationDatabase admin -o /data/backup
或
[root@MongoDB-01 ~]# mongodump --uri="mongodb://root:123@localhost:27017" --authenticationDatabase admin -o /data/backup
1.2.2 备份指定库
json
复制代码
mongodump --host=localhost --port=27017 -uroot -p123 --authenticationDatabase admin --db=product -o /data/backup/product
1.2.3 备份指定集合
json
复制代码
mongodump --host=localhost --port=27017 -uroot -p123 --authenticationDatabase admin --db=product --collection=orders -o /data/backup
1.2.4 压缩备份
bash
复制代码
[root@MongoDB-07 backup]# mongodump --host=127.0.0.1 -uroot -p123 --port=27017 --authenticationDatabase=admin -o /data/backup --gzip
1.2.5 带oplog的备份
json
复制代码
[root@MongoDB-07 backup]# mongodump --host=127.0.0.1 --port=27017 -uroot -p123 --authenticationDatabase=admin -o /data/backup --gzip --oplog
2.恢复工具mongorestore
2.1 选项说明
| 分类 |
选项 |
描述 |
| 常规选项 |
--help |
打印使用说明 |
|
--version |
打印工具版本并退出 |
|
--config= |
配置文件路径 |
| 详细级别选项 |
-v, --verbose= |
更详细的日志输出(可多次使用增加详细程度,如-vvvvv,或指定数值如--verbose=N) |
|
--quiet |
隐藏所有日志输出 |
| 连接选项 |
-h, --host= |
要连接的MongoDB主机(副本集使用setname/host1,host2格式) |
|
--port= |
服务器端口(也可使用--host hostname:port格式) |
| 认证选项 |
-u, --username= |
认证用户名 |
|
-p, --password= |
认证密码 |
|
--authenticationDatabase= |
存储用户凭据的数据库 |
|
--authenticationMechanism= |
使用的认证机制 |
|
--awsSessionToken= |
通过AWS IAM认证的会话令牌 |
| 命名空间选项 |
-d, --db= |
要使用的数据库 |
|
-c, --collection= |
要使用的集合 |
| 命名空间选项 |
--nsExclude= |
排除匹配的命名空间 |
|
--nsInclude= |
包含匹配的命名空间 |
|
--nsFrom= |
重命名匹配的命名空间,必须与nsTo匹配 |
|
--nsTo= |
重命名匹配的命名空间,必须与nsFrom匹配 |
| URI选项 |
--uri=mongodb-uri |
MongoDB URI连接字符串 |
| 输入选项 |
--objcheck |
插入前验证所有对象 |
|
--oplogReplay |
用于恢复非分片集群的副本集的时间点快照 |
|
--oplogLimit=[:ordinal] |
仅包含在提供的Timestamp之前的oplog条目 |
|
--oplogFile= |
用于重放oplog的oplog文件 |
|
--archive= |
从指定的存档文件恢复转储。如果指定标志但无值,则从stdin读取存档 |
|
--restoreDbUsersAndRoles |
恢复给定数据库的用户和角色定义 |
|
--dir= |
输入目录,使用'-'表示stdin |
|
--gzip |
解压缩gzip压缩的输入 |
| 恢复选项 |
--drop |
导入前删除每个集合 |
|
--dryRun |
查看摘要而不导入任何内容。建议与详细模式一起使用 |
|
--writeConcern= |
写关注选项,如--writeConcern majority,--writeConcern '{w: 3, wtimeout: 500, fsync: true, j: true}' |
|
--noIndexRestore |
不恢复索引 |
|
--convertLegacyIndexes |
移除无效的索引选项并重写遗留选项值(例如,true变为1) |
|
--noOptionsRestore |
不恢复集合选项 |
|
--keepIndexVersion |
不更新索引版本 |
|
--maintainInsertionOrder |
按照输入源中的出现顺序恢复文档。默认情况下,插入将以任意顺序执行。设置此标志还会启用--stopOnError的行为,并将NumInsertionWorkersPerCollection限制为1 |
|
-j, --numParallelCollections= |
并行恢复的集合数量 |
|
--numInsertionWorkersPerCollection= |
每个集合并发运行的插入操作数量 |
|
--stopOnError |
在插入过程中遇到任何错误时停止。默认情况下,mongorestore会尝试继续处理文档验证和DuplicateKey错误,但启用此选项后,工具将停止。即使启用此选项,在遇到错误后仍可能插入少量文档;使用--maintainInsertionOrder可在错误后立即停止 |
|
--bypassDocumentValidation |
绕过文档验证 |
|
--preserveUUID |
保留原始集合UUID(默认关闭,需要drop) |
|
--fixDottedHashIndex |
启用时,目标上所有带点字段的哈希索引将被创建为单字段升序索引 |
2.2 例子
2.2.1 恢复全备
json
复制代码
#(1)恢复未压缩的全备
mongorestore --host=127.0.0.1 --port=27017 -uroot -p123 --authenticationDatabase=admin --dir=/data/backup/ --drop
#(2)恢复压缩的全备
mongorestore --host=127.0.0.1 --port=27017 -uroot -p123 --authenticationDatabase=admin --dir=/data/backup/ --gzip --drop
2.2.2 恢复指定库
Plain
复制代码
mongorestore --host=127.0.0.1 --port=27017 -uroot -p123 --authenticationDatabase=admin -d product --dir=/data/backup/product --gzip --drop
2.2.3 恢复单个集合
json
复制代码
[root@MongoDB-07 backup]# mongorestore --host=127.0.0.1 --port=27017 -uroot -p123 --authenticationDatabase=admin -d product -c order --dir=/data/backup/product/order.bson.gz --gzip
oplog与误删除恢复操作请参考oplog与误删除恢复操作