mongodb 二进制 BSON 转储 mongodump
时间:2023-08-29 15:37:02
前提:
mongodump不能成为 4.2 由于创建的备份不维护跨片事务的原子性保证,这些集群的备份策略的一部分已经进行了分片事务。
所需的访问权限
访问控制访问控制mongodump的 MongoDB 部署 操作时,您必须有权授予每个数据库备份操作。内置角色提供执行任何和所有数据库备份所需的权限。
您需要授权备份权, 否则会出现以下错误:
root@ubuntu-x64_01:/data# mongodump --host=localhost --port=27017 -u mongobackup -p ****** --db=test --out=/data/backup/mongodbbackup 2022-05-25T20:59:19.244 0800 Failed: can't create session: could not connect to server: connection() : auth error: sasl conversation error: unable to authenticate using mechanism "SCRAM-SHA-1": (AuthenticationFailed) Authentication failed
备份和恢复角色
admin数据库包括备份和恢复数据的以下角色:
backup
提供备份数据所需的最低权限。这个角色提供了足够的使用权限MongoDB Cloud Manager备份代理、 Ops Manager备份代理或用于 mongodump备份整个mongod实例。
可通过以下命令查看 backup 角色的相关权限:
use admin; db.runCommand( {
rolesInfo: {
role: "backup", db: "admin" }, showPrivileges: true } )
创建用户并联系backup角色 , 执行下列命令:
sit_rs1:PRIMARY> use admin; switched to db admins it_rs1:PRIMARY> db.getSiblingDB("admin").createUser({
user: "backupuser", ... "pwd": "******", ... "roles" : [ ... {
"db" : "admin", "role" : "backup" } ... ] ... }); Successfully added user: {
"user" : "backupuser", "roles" : [ {
"db" : "admin", "role" : "backup" } ] }
mongodump将导出BSON包含可通过主机的文件mongod27017年侦听端口访问数据副本, 您可以使用以下选项来指定不同的输出目录:–out or -o,
从非本地mongod例子创建备份
–host 选项 允许您连接远程主机并备份远程主机
如下所示:
root@ubuntu-x64_01:/data# mongodump --host=localhost --port=27017 -u backupuser -p ****** --out=/data/backp/mongodbbackup
2022-05-26T11:16:25.783+0800 writing admin.system.users to
2022-05-26T11:16:25.784+0800 done dumping admin.system.users (6 documents)
2022-05-26T11:16:25.784+0800 writing admin.system.roles to
2022-05-26T11:16:25.785+0800 done dumping admin.system.roles (2 documents)
2022-05-26T11:16:25.786+0800 writing admin.system.version to
2022-05-26T11:16:25.786+0800 done dumping admin.system.version (2 documents)
2022-05-26T11:16:25.787+0800 writing admin.pbmLog to
2022-05-26T11:16:25.790+0800 writing admin.pbmConfig to
2022-05-26T11:16:25.790+0800 writing admin.pbmCmd to
2022-05-26T11:16:25.792+0800 writing test.users to
2022-05-26T11:16:25.797+0800 done dumping admin.pbmLog (794 documents)
2022-05-26T11:16:25.798+0800 writing admin.pbmLock to
2022-05-26T11:16:25.843+0800 done dumping admin.pbmLock (0 documents)
2022-05-26T11:16:25.865+0800 writing admin.pbmPITRChunks to
2022-05-26T11:16:25.867+0800 done dumping admin.pbmConfig (1 document)
2022-05-26T11:16:25.867+0800 writing admin.pbmBackups to
2022-05-26T11:16:25.867+0800 done dumping test.users (1 document)
2022-05-26T11:16:25.868+0800 done dumping admin.pbmBackups (0 documents)
2022-05-26T11:16:25.869+0800 done dumping admin.pbmCmd (1 document)
2022-05-26T11:16:25.869+0800 done dumping admin.pbmPITRChunks (0 documents)
要限制数据库转储中包含的数据量,您可以将–db和 --collection作为选项 指定为mongodump. 如下:
并指定 --authticationDatabase 参数:
root@ubuntu-x64_01:/data/backup/mongodbbackup# mongodump --host=localhost --port=27017 -u backupuser -p ****** --db=test --authenticationDatabase=admin --out=/data/backup/mongodbbackup
2022-05-26T11:53:33.985+0800 writing test.users to
2022-05-26T11:53:33.986+0800 done dumping test.users (1 document)
–uri=[connectionString]指定 MongoDB 部署的可解析URI 连接字符串,用引号括起来:
root@ubuntu-x64_01:/opt# mongodump --uri='mongodb://admin:******@localhost:27017,localhost:27018,localhost:27019/test?replicaSet=rs1&authSource=admin' --out=/data/backup/mongodbbackup
2022-06-14T22:39:08.938+0800 writing test.test to
2022-06-14T22:39:08.939+0800 done dumping test.test (1 document)
–host=<:port>, -h=<:port>
默认值:本地主机:27017
指定 MongoDB 部署的可解析主机名。默认情况下,mongodump尝试连接到在 localhost 的端口号上运行的 MongoDB 实例27017。
要连接到副本集,请指定 replSetName集合成员的和种子列表,如下所示:
root@ubuntu-x64_01:/opt# mongodump --host='rs1/localhost:27017,localhost:27018,localhost:27019' -u admin -p '******' --db=test --authenticationDatabase=admin --out=/data/backup/mongodbbackup
2022-06-14T23:44:01.187+0800 WARNING: ignoring unsupported URI parameter 'replicaset'
2022-06-14T23:44:01.218+0800 writing test.test to
2022-06-14T23:44:01.219+0800 done dumping test.test (1 document)
指定副本集列表格式时,mongodump始终连接到主.
–gzip
3.2 版中的新功能。
压缩输出。如果mongodump输出到转储目录,则新功能会压缩单个文件。文件有后缀.gz。
如果mongodump输出到存档文件或标准输出流,则新功能会将存档文件或数据输出压缩到流中。
root@ubuntu-x64_01:/opt# mongodump --gzip --host='rs1/localhost:27017,localhost:27018,localhost:27019' -u admin -p '******' --db=test --authenticationDatabase=admin --out=/data/backup/mongodbbackup
2022-06-14T23:45:18.356+0800 WARNING: ignoring unsupported URI parameter 'replicaset'
2022-06-14T23:45:18.376+0800 writing test.test to
2022-06-14T23:45:18.376+0800 done dumping test.test (1 document)
root@ubuntu-x64_01:/opt# ls -tlh /data/backup/mongodbbackup/test/
total 16K
-rw-r--r-- 1 root root 62 Jun 14 23:45 test.bson.gz
-rw-r--r-- 1 root root 144 Jun 14 23:45 test.metadata.json.gz
–collection=, -c=
指定要备份的集合。如果不指定集合,此选项会将指定数据库或实例中的所有集合复制到转储文件中。
root@ubuntu-x64_01:/opt# mongodump --host='rs1/localhost:27017,localhost:27018,localhost:27019' -u admin -p '******' --db=test -c test --authenticationDatabase=admin --out=/data/backup/mongodbbackup
2022-06-14T23:47:14.802+0800 WARNING: ignoring unsupported URI parameter 'replicaset'
2022-06-14T23:47:14.820+0800 writing test.test to
2022-06-14T23:47:14.821+0800 done dumping test.test (1 document)
–query=, -q=
提供JSON 文档作为查询,可选择限制mongodump. 要使用该–query选项,您还必须指定该 --collection选项。
您必须将查询文档用单引号 ( ) 括起来,以确保它不会与您的 shell 环境交互。‘{ … }’
从 MongoDB 4.2 开始,查询必须采用 扩展 JSON v2 格式(宽松或规范/严格模式),包括将字段名称和运算符括在引号中。例如:
root@ubuntu-x64_01:/opt# mongodump --host='rs1/localhost:27017,localhost:27018,localhost:27019' -u admin -p '******' --db=test -c test -q='{ "name": { "$eq": "test" }}' --authenticationDatabase=admin --out=/data/backup/mongodbbackup
2022-06-14T23:48:05.698+0800 WARNING: ignoring unsupported URI parameter 'replicaset'
2022-06-14T23:48:05.716+0800 writing test.test to
2022-06-14T23:48:05.730+0800 done dumping test.test (1 documents)
–numParallelCollections=, -j=
默认值:4
mongodump应并行导出的集合数量。
root@ubuntu-x64_01:/opt# mongodump --host=localhost --port=27017 -u admin -p '******' --db=test -c test -j 8 --authenticationDatabase=admin --out=/data/backup/mogdbbackup
2022-06-15T21:56:46.210+0800 writing test.test to
2022-06-15T21:56:46.210+0800 done dumping test.test (1 document)
–dumpDbUsersAndRoles
mongodump在特定数据库上执行时,在数据库的转储目录中包括用户和角色定义。仅当您在选项中指定数据库时,此选项才适用 --db。mongodump当应用于整个实例而不仅仅是特定数据库时,MongoDB 始终包含用户和角色定义。
root@ubuntu-x64_01:/opt# mongodump --host=localhost --port=27017 -u admin -p '******' --db=test --dumpDbUsersAndRoles --authenticationDatabase=admin --out=/data/backup/mogdbbackup
2022-06-15T21:57:54.883+0800 dumping users and roles for test
2022-06-15T21:57:54.885+0800 writing test.test to
2022-06-15T21:57:54.885+0800 done dumping test.test (1 document)