mongodb如何创建备份,以及如何恢复数据?
发布时间:2022-03-04 19:47:27 所属栏目:系统 来源:互联网
导读:了解数据的备份与恢复是很有必要的,因此我们很难保证数据不会出现意外,做好备份与恢复能够让数据损失降到最低。那么在mongodb如何创建备份,以及如何恢复数据呢?下面我们一起来学习一下。 为什么要备份? 备份的目的是对数据做冗余的一种方式,它能够让我
了解数据的备份与恢复是很有必要的,因此我们很难保证数据不会出现意外,做好备份与恢复能够让数据损失降到最低。那么在mongodb如何创建备份,以及如何恢复数据呢?下面我们一起来学习一下。 为什么要备份? 备份的目的是对数据做冗余的一种方式,它能够让我们在某种情况下保证最少数据的丢失;之前我们对mongodb做副本集也是对数据做冗余,但是这种在副本集上做数据冗余仅仅是针对系统故障或服务异常等一些非人为的故障发生时,保证数据服务的可用性;它不能够避免人为的误操作;为了使得数据的安全,将数据损失降低到最小,我们必须对数据库周期性的做备份; mongodb逻辑备份工具 在mongodb中使用逻辑备份的工具有两组,第一组是mongodump/mongorestore,使用mongodump/mongorestore这组工具来逻辑的备份数据,它备份出来的数据是BSON格式,BSON是一种二进制格式,通常无法使用文本编辑器直接打开查看其内容,对人类的可读性较差,但它的优点是保存的文件体积要小;使用这组命令导出的数据,在恢复是依赖mongodb版本,不同版本导出的BSON格式略有不同,所以恢复时,可能存在版本不同而导致恢复数据失败的情况;另外一组是mongoexport/mongoimport,这组工具导出的数据是json格式的数据,通常我们可以使用文本编辑器打开直接查看,对人类的可读性较好,但体积相对BSON格式的数据要大,恢复时不依赖版本;所以跨版本备份要先查看下对应版本的兼容性,如果兼容使用mongodump/mongorestore,不兼容的话建议使用mongoexport/mongoimport;这里需要注意一点,JSON格式虽然可读性很好,也很通用,但是它只是保留了数据部分,而没有保留索引,账户等基础信息,在使用是应该注意; 使用mongodump备份数据 插入数据 > use testdb switched to db testdb > for(i=1;i<=1000;i++) db.test.insert({id:i,name:"test"+i,age:(i%120),classes:(i%25)}) WriteResult({ "nInserted" : 1 }) > show tables test > db.test.findOne() { "_id" : ObjectId("5fb130da012870b3c8e3c4ad"), "id" : 1, "name" : "test1", "age" : 1, "classes" : 1 } > db.test.count() 1000 > 备份所有数据库 [root@node11 ~]# mongodump -utom -p123456 -h 192.168.0.52:27017 --authenticationDatabase admin -o ./node12_mongodb_full_backup 2020-11-15T21:47:45.439+0800 writing admin.system.users to node12_mongodb_full_backup/admin/system.users.bson 2020-11-15T21:47:45.442+0800 done dumping admin.system.users (4 documents) 2020-11-15T21:47:45.443+0800 writing admin.system.version to node12_mongodb_full_backup/admin/system.version.bson 2020-11-15T21:47:45.447+0800 done dumping admin.system.version (2 documents) 2020-11-15T21:47:45.448+0800 writing testdb.test to node12_mongodb_full_backup/testdb/test.bson 2020-11-15T21:47:45.454+0800 done dumping testdb.test (1000 documents) [root@node11 ~]# ls node12_mongodb_full_backup [root@node11 ~]# ll node12_mongodb_full_backup/ total 0 drwxr-xr-x 2 root root 128 Nov 15 21:47 admin drwxr-xr-x 2 root root 49 Nov 15 21:47 testdb [root@node11 ~]# tree node12_mongodb_full_backup/ node12_mongodb_full_backup/ ├── admin │ ├── system.users.bson │ ├── system.users.metadata.json │ ├── system.version.bson │ └── system.version.metadata.json └── testdb ├── test.bson └── test.metadata.json 2 directories, 6 files [root@node11 ~]# 提示:-u用于指定用户,-p指定对应用户的密码,-h指定数据库地址,--authenticationDatabase 指定验证用户和密码对应的数据库 -o指定要存放备份文件的目录名称; 只备份单个testdb数据库 [root@node11 ~]# mongodump -utom -p123456 -h 192.168.0.52:27017 --authenticationDatabase admin -d testdb -o ./node12_testdb 2020-11-15T21:53:36.523+0800 writing testdb.test to node12_testdb/testdb/test.bson 2020-11-15T21:53:36.526+0800 done dumping testdb.test (1000 documents) [root@node11 ~]# tree ./node12_testdb ./node12_testdb └── testdb ├── test.bson └── test.metadata.json 1 directory, 2 files [root@node11 ~]# 提示:-d用户指定要备份的数据库名称; 只备份testdb下的test集合 [root@node11 ~]# mongodump -utom -p123456 -h 192.168.0.52:27017 --authenticationDatabase admin -d testdb -c test -o ./node12_testdb_test-collection 2020-11-15T21:55:48.217+0800 writing testdb.test to node12_testdb_test-collection/testdb/test.bson 2020-11-15T21:55:48.219+0800 done dumping testdb.test (1000 documents) [root@node11 ~]# tree ./node12_testdb_test-collection ./node12_testdb_test-collection └── testdb ├── test.bson └── test.metadata.json 1 directory, 2 files [root@node11 ~]# 提示:-c用于指定要备份的集合(collection)名称; 压缩备份testdb库 [root@node11 ~]# mongodump -utom -p123456 -h 192.168.0.52:27017 --authenticationDatabase admin -d testdb --gzip -o ./node12_mongodb_testdb-gzip 2020-11-15T22:00:52.268+0800 writing testdb.test to node12_mongodb_testdb-gzip/testdb/test.bson.gz 2020-11-15T22:00:52.273+0800 done dumping testdb.test (1000 documents) [root@node11 ~]# tree ./node12_mongodb_testdb-gzip ./node12_mongodb_testdb-gzip └── testdb ├── test.bson.gz └── test.metadata.json.gz 1 directory, 2 files [root@node11 ~]# 提示:可以看到使用压缩,只需要加上--gzip选项即可,备份出来的数据就是.gz后缀结尾的压缩文件; 压缩备份testdb库下的test集合 [root@node11 ~]# mongodump -utom -p123456 -h 192.168.0.52:27017 --authenticationDatabase admin -d testdb -c test --gzip -o ./node12_mongodb_testdb-test-gzip 2020-11-15T22:01:31.492+0800 writing testdb.test to node12_mongodb_testdb-test-gzip/testdb/test.bson.gz 2020-11-15T22:01:31.500+0800 done dumping testdb.test (1000 documents) [root@node11 ~]# tree ./node12_mongodb_testdb-test-gzip ./node12_mongodb_testdb-test-gzip └── testdb ├── test.bson.gz └── test.metadata.json.gz 1 directory, 2 files [root@node11 ~]# 使用mongorestore恢复数据 在node12上删除testdb > db testdb > db.dropDatabase() { "dropped" : "testdb", "ok" : 1 } > show dbs admin 0.000GB config 0.000GB local 0.000GB > 验证:登录192.168.0.52:27017查看对应testdb数据库是否恢复? [root@node11 ~]# mongo -utom -p123456 192.168.0.52:27017/admin MongoDB shell version v4.4.1 connecting to: mongodb://192.168.0.52:27017/admin?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("af96cb64-a2a4-4d59-b60a-86ccbbe77e3e") } MongoDB server version: 4.4.1 Welcome to the MongoDB shell. For interactive help, type "help". For more comprehensive documentation, see https://docs.mongodb.com/ Questions? Try the MongoDB Developer Community Forums https://community.mongodb.com --- The server generated these startup warnings when booting: 2020-11-15T20:42:23.774+08:00: ***** SERVER RESTARTED ***** 2020-11-15T20:42:29.198+08:00: /sys/kernel/mm/transparent_hugepage/enabled is 'always'. We suggest setting it to 'never' 2020-11-15T20:42:29.198+08:00: /sys/kernel/mm/transparent_hugepage/defrag is 'always'. We suggest setting it to 'never' --- --- Enable MongoDB's free cloud-based monitoring service, which will then receive and display metrics about your deployment (disk utilization, CPU, operation statistics, etc). 恢复单个库 删除testdb库 > show dbs admin 0.000GB config 0.000GB local 0.000GB testdb 0.000GB > use testdb switched to db testdb > db.dropDatabase() { "dropped" : "testdb", "ok" : 1 } > show dbs admin 0.000GB config 0.000GB local 0.000GB > (编辑:晋中站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |