mongodump
概要
mongodump
是一个用于备份数据库内容的实用程序,mongodump
可以从mongod
或mongos
实例中导出数据。mongodump
可以是mongostore
的备份策略的一部分,用于基于查询的部分备份。但是,使用mongodump
和mongorestore
作为备份策略对于分片群集和副本集可能会有问题。
从系统命令行运行
mongodump
,而不是mongo shell
。
使用
mongodump --db test --collection users
运行后,默认会在你当前工作目录的dump
文件夹下,生成一个名为test
的文件夹。其中一个是bson
数据,另一个是集合元数据,两个文件的格式都是json
。
——dump
|——test
|——users.bson
|——users.metadata
假设数据库test
下,有集合users
和company
。那么如果想排除一些,只转储剩下的集合。就需要用到参数--excludeCollection
,例如:
mongodump --db test --excludeCollection=users
那么test
文件夹中只会保存company.bson
和company.metadata
文件。
当要排除多个集合时,参数--excludeCollection
就需要填写几次,例如:
mongodump --db test --excludeCollection=users --excludeCollection=company
之前说到,默认情况下,会将备份文件放到当前工作目录的dump
目录下。但是如果你想重新设置一个目录,就需要用到--out
参数。例如:
mongodump --db test --collection users --out ../mongodump2018-12-26
执行后,会在你当前目录的父目录下的mongodump2018-12-26
文件夹中,生成备份文件。
如果需要在备份时对文件进行压缩,可以使用--gzip
选项,那么生成的两个文件,将会是经过压缩的文件。例如:
mongodump --db test --collection users --gzip
如果想将数据保存成ARCHIVE
文件,则需要使用--archive
选项,例如:
mongodump --db test --collection users --archive=users20181226.archive
执行成功后,会在你当前目录下,生成一个users20181226.archive
文件。但是这些文件如果需要恢复备份的数据,就要用到mongorestore
。
mongorestore
概要
mongorestore
程序将数据从mongodump
创建的二进制数据库备份恢复或加载到mongod
或mongos
实例中。mongorestore
可以创建一个新的数据库或者将数据添加到已经存在的数据库中。但是,mongorestore
扮演的角色类似插入操作,而不是更新操作。即如果有相同内容,它也会进行插入,而不会重写文档。
从系统命令行运行
mongodump
,而不是mongo shell
。
特性
mongorestore
会重新创建mongodump
记录的索引。默认的索引是_id
,所以不需要重新载入。但是当你载入的数据的默认索引有重复,那么就会出现错误。例如,上面生成的test20181226.archive
文件加载到mongos
中,会出现下面的错误:
D:\mongodb\bin>mongorestore --archive=test.20181226.archive
2018-12-26T12:36:14.110+0800 preparing collections to restore from
2018-12-26T12:36:14.129+0800 reading metadata for test.users from archive 'test.20181226.archive'
2018-12-26T12:36:14.129+0800 restoring test.users from archive 'test.20181226.archive'
2018-12-26T12:36:14.145+0800 error: multiple errors in bulk operation: - E11000 duplicate key error collection: test.users index: _id_ dup key: { : ObjectId('5c21fae76818ba7cb05df771') } - E11000 duplicate key error collection: test.users index: _id_ dup key: { : ObjectId('5c21fb136818ba7cb05df772') }
2018-12-26T12:36:14.145+0800 no indexes to restore
2018-12-26T12:36:14.145+0800 finished restoring test.users (2 documents)
2018-12-26T12:36:14.146+0800 done
正确执行后,会是下面的提示:
D:\mongodb\bin>mongorestore --archive=test.20181226.archive
2018-12-26T12:59:39.470+0800 preparing collections to restore from
2018-12-26T12:59:39.489+0800 reading metadata for test.users from archive 'test.20181226.archive'
2018-12-26T12:59:39.489+0800 restoring test.users from archive 'test.20181226.archive'
2018-12-26T12:59:39.495+0800 no indexes to restore2018-12-26T12:59:39.495+0800 finished restoring test.users (2 documents)
2018-12-26T12:59:39.495+0800 done
参考文章