当前位置: 首页 > news >正文

数据库应用:MongoDB 数据备份与恢复

目录

一、实验

1.MongoDB 数据库备份与恢复

2.MongoDB 数据表备份与恢复

二、问题

1.MongoDB有哪些命令行工具实现数据备份与恢复


一、实验

1.MongoDB 数据库备份与恢复

(1)查看版本

root@node1:~# mongo --version

(2)准备测试数据,mongoDB终端下进行以下操作,插入200000条数据

use demo
fotmatnumber = (start, end)=>{num = Math.round(Math.random() * (end-start)) + startif(num<10){return "0"+num;}else{return num;}
}rand_title = (i)=>{num = Math.round( Math.random() * 10 );num1 = Math.round( Math.random() * 10 );return ["赠送礼品-"+num,"购物狂欢-"+num,"随便买买-"+num,"愉快购物-"+num,"赠送礼物-"+num,"商品购买-"+num,"买多送多-"+num,"买年货-"+num,"买买买买-"+num,"充值会员-"+num][num1];
}for(var i=0; i<200000; i++){  db.orders.insert({"onumber": ( "0000000000000000" + i ).substr( String(i).length ),  "date": "20"+fotmatnumber(0,21)+"-"+fotmatnumber(1,12)+"-"+fotmatnumber(1,31),  "title": rand_title(i),"user_id": parseInt(i/200)+1,"items" :[{ "goods_id" : parseInt(i/200)+1,"goods_attr" : i,  "price" : 100.0},{ "goods_id" : parseInt(i/200)+2,"goods_attr" : i+1,  "price" : 80.0}]})if(i%10000==0){print("已经添加了"+parseInt(i/10000)+"万条数据!");}
}

(2)查看demo数据库大小

root@node1:~# mongo
……
> show dbs;
admin   0.000GB
config  0.000GB
demo    0.010GB
local   0.000GB
> exit
bye

(3) 数据备份

root@node1:~# mongodump -h 127.0.0.1:27017 -d demo -o backup

(4)删除demo数据库

root@node1:~# mongo
……
> show dbs;
admin   0.000GB
config  0.000GB
demo    0.010GB
local   0.000GB
> use demo;
switched to db demo
> db.dropDatabase()
{ "dropped" : "demo", "ok" : 1 }
> show dbs;
admin   0.000GB
config  0.000GB
local   0.000GB
> exit
bye

(5)数据恢复

root@node1:~# mongorestore -h 127.0.0.1:27017 -d demo --dir /root/backup/demo

(6)查看数据恢复情况

root@node1:~# mongo
……
> use dbs;
switched to db dbs
> show dbs;
admin   0.000GB
config  0.000GB
demo    0.009GB
local   0.000GB

2.MongoDB 数据表备份与恢复

(1)查询demo数据表的orders数据表文件(默认每次20个)

……
> use demo;
switched to db demo
> show tables;
orders
> db.orders.find()

(2)输入it遍历查询后20个文件

Type "it" for more
> it

(3)修改返回结果数据的单页显示数量为30条,默认20条

> DBQuery.shellBatchSize=30
30

(4)删除orders表中的多个文档 ,目前显示剩余190078条文档

> db.orders.deleteMany({"title":"买买买买-1"})
{ "acknowledged" : true, "deletedCount" : 2037 }
> db.orders.deleteMany({"title":"买买买买-3"})
{ "acknowledged" : true, "deletedCount" : 1988 }
> db.orders.deleteMany({"title":"买买买买-4"})
{ "acknowledged" : true, "deletedCount" : 2062 }
> db.orders.deleteMany({"title":"买买买买-5"})
{ "acknowledged" : true, "deletedCount" : 1902 }
> db.orders.deleteMany({"title":"买买买买-8"})
{ "acknowledged" : true, "deletedCount" : 1933 }
> db.order.count()
0
> db.orders.count()
190078
> exit
bye

(5)数据进行恢复

--drop 恢复数据前,先删除MongoDB中的旧数据

root@node1:~# mongorestore -h 127.0.0.1:27017 -d demo --dir /root/backup/demo --drop
2023-11-26T21:21:23.636-0800	The --db and --collection flags are deprecated for this use-case; please use --nsInclude instead, i.e. with --nsInclude=${DATABASE}.${COLLECTION}
2023-11-26T21:21:23.637-0800	building a list of collections to restore from /root/backup/demo dir
2023-11-26T21:21:23.637-0800	reading metadata for demo.orders from /root/backup/demo/orders.metadata.json
2023-11-26T21:21:23.638-0800	dropping collection demo.orders before restoring
2023-11-26T21:21:23.667-0800	restoring demo.orders from /root/backup/demo/orders.bson
2023-11-26T21:21:25.993-0800	finished restoring demo.orders (200000 documents, 0 failures)
2023-11-26T21:21:25.993-0800	no indexes to restore for collection demo.orders
2023-11-26T21:21:25.993-0800	200000 document(s) restored successfully. 0 document(s) failed to restore.

(6)查看恢复情况

root@node1:~# mongo
……
> use demo;
switched to db demo
> db.orders.count()
200000
> exit
bye

(7)数据导出

root@node1:~# mongoexport -d demo -c orders -o /root/backup/orders.json --type json
2023-11-26T21:24:52.113-0800	connected to: mongodb://localhost/
2023-11-26T21:24:53.117-0800	[##......................]  demo.orders  24000/200000  (12.0%)
2023-11-26T21:24:54.117-0800	[######..................]  demo.orders  56000/200000  (28.0%)
2023-11-26T21:24:55.116-0800	[########................]  demo.orders  72000/200000  (36.0%)
2023-11-26T21:24:56.116-0800	[############............]  demo.orders  104000/200000  (52.0%)
2023-11-26T21:24:57.117-0800	[################........]  demo.orders  136000/200000  (68.0%)
2023-11-26T21:24:58.117-0800	[####################....]  demo.orders  168000/200000  (84.0%)
2023-11-26T21:24:59.056-0800	[########################]  demo.orders  200000/200000  (100.0%)
2023-11-26T21:24:59.056-0800	exported 200000 records

(8)查看导出文件,一共200000条

(9)删除数据表orders

root@node1:~/backup# mongo
……
> use demo;
switched to db demo
> show tables;
orders
> db.orders.drop()
true
> show tables;
> exit
bye

(10)导入数据进行恢复

root@node1:~/backup# mongoimport -d demo -c orders --file /root/backup/orders.json --type json
2023-11-26T21:29:06.494-0800	connected to: mongodb://localhost/
2023-11-26T21:29:09.495-0800	[########................] demo.orders	16.7MB/48.0MB (34.8%)
2023-11-26T21:29:12.495-0800	[################........] demo.orders	32.0MB/48.0MB (66.8%)
2023-11-26T21:29:15.311-0800	[########################] demo.orders	48.0MB/48.0MB (100.0%)
2023-11-26T21:29:15.311-0800	200000 document(s) imported successfully. 0 document(s) failed to import.

(11)查看恢复情况

root@node1:~/backup# mongo
……
> use demo
switched to db demo
> show tables;
orders
> db.orders.count()
200000
> exit
bye

二、问题

1.MongoDB有哪些命令行工具实现数据备份与恢复

(1)命令行工具

MongdoDB一共提供了4个命令行工具给我们对数据进行备份与恢复以及导入与导出数据。

(2)备份与恢复

备份与恢复操作的数据文件格式是bson格式,二进制

1)数据备份
mongodump -h dbhost -d dbname -o dbdirectory
# 例如:备份一个demo的数据库
mongodump -h 127.0.0.1:27017 -d demo -o /root/backup2)数据恢复
mongorestore -h dbhost -d dbname --dir dbdirectory --drop
# 例如:恢复上面备份的demo数据库
mongorestore -h 127.0.0.1:27017 -d demo --dir /root/backup/demo

(3) 导入与导出

导入与导出数据的数据文件格式是json格式,文本格式

1) 数据导出
mongoexport -d dbname -c collectionname -o file --type json/csv -f field
# 例如:导出demo数据库的orders集合数据
mongoexport -d demo -c orders -o /root/backup/orders.json --type json2) 数据导入
mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field
# 例如:把上面导出的json中的数据,导入到demo数据库的orders集合中
mongoimport -d demo -c orders --file /order/backup/orders.json --type json

http://www.lryc.cn/news/249226.html

相关文章:

  • MySQL-函数
  • 【12】Python函数专题(下)
  • 国标GB28181协议/RTSP视频监控汇聚平台EasyCVR(V.3.4)页面UI大更新
  • 生成式AI与预测式AI的主要区别与实际应用
  • 【JavaEE】多线程 -- 死锁问题
  • XTU OJ 1339 Interprime 学习笔记
  • 【Web安全】xss攻击方式与绕过
  • 文件夹重命名技巧:用关键词替换文件夹名称指定内容的右侧文字
  • python pip安装第三方包时报错 error: Microsoft Visual C++ 14.0 or greater is required.
  • 对 .NET程序2G虚拟地址紧张崩溃 的最后一次反思
  • HCIA-RS基础-静态路由协议
  • LeetCode(46)汇总区间【区间】【简单】
  • 数据预处理:随机裁剪放缩
  • RabbitMQ 搭建和工作模式
  • 一起学docker系列之七docker容器卷技术
  • Loki安装部署
  • php如何实现文件上传
  • 实验8配置工具
  • 论文笔记:详解NEUPSL DSI
  • shared_ptr子类指针转换成父类指针
  • 五、cookie、session、token、localstroage、sessionStroage区别
  • 基于SpringBoot的在线视频教育平台的设计与实现
  • Vue 2.0源码分析-渲染函数render
  • 阿里云国际短信业务网络超时排障指南
  • 浅用tensorflow天气预测
  • 基于SpringBoot学生读书笔记共享
  • 设计模式之装饰模式(2)--有意思的想法
  • 深入了解 Pinia:现代 Vue 应用的状态管理利器
  • TTS声音合成:paddlespeech、sherpa-onnx、coqui-ai
  • Android frameworks 开发总结之十一