详谈MongoDB数据库的备份、还原、导入与导出
2022/3/2 19:45:10
本文主要是介绍详谈MongoDB数据库的备份、还原、导入与导出,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
大家好,我是小眼睛优粥面,最近总是再用MongoDB数据库,确实比较方便。在部署程序的时候也总是用到数据库迁移与备份,今天就简单总结一下,欢迎大家交流分享(码字不易,希望大家标明出处),有不对的地方请大家指正,也希望大家关注我的微信公众号 “记不住先生和忘不了小姐”,里面不光有 “记不住” 的技术还有那 “忘不了” 的情怀,万分感谢啦^ ^
操作系统:Window 10 企业版 2015
MongoDB版本:mongodb-windows-x86_64-5.0.5
在MongoDB数据中备份和还原主要分为二种,一种是针对于库的 mongodump 和 mongorestore,一种是针对库中表的 mongoexport 和 mongoimport,下面我们就来注意介绍:
1、mongodump 和 mongorestore备份、还原数据库
(1)mongodump备份数据库基本命令
> mongodump -h IP地址 --port 端口号 -u 用户名 -p 密码 -d 数据库名称 -o 文件存储路径
其中,有一些参数可以选择性调整,具体如下:
- 如果没有设置用户名和密码,-u 和 -p 内容可以去掉。
- 如果导出的是本机的数据库,-h 内容可以去掉。
- 如果是默认端口,--port 内容可以去掉。
- 如果想导出所有数据库,-d 内容可以去掉。
参考示例:
a)导出全部数据
C:\mongodb\Server\5.0\bin>mongodump -h 127.0.0.1 -o C:\data 2022-01-21T15:25:34.638+0800 writing admin.system.version to C:\data\admin\system.version.bson 2022-01-21T15:25:34.656+0800 done dumping admin.system.version (1 document) 2022-01-21T15:25:34.656+0800 writing test_db.test_data to C:\data\test_db\test_data.bson 2022-01-21T15:25:35.076+0800 done dumping test_db.test_data (100044 documents) ...
b)导出指定表的数据
C:\mongodb\Server\5.0\bin>mongodump -h 192.168.1.1 -d test_db -o C:\data 2022-01-21T15:25:34.656+0800 writing test_db.test_data to C:\data\test_db\test_data.bson 2022-01-21T15:25:35.076+0800 done dumping test_db.test_data (100044 documents) ...
(2)mongorestore还原数据库基本命令
> mongorestore -h IP地址 --port 端口号 -u 用户名 -p 密码 -d 数据库名称 --drop 文件存储路径
参考示例:
a)导入全部数据
C:\mongodb\Server\5.0\bin>mongorestore -h 127.0.0.1 -o C:\data 2022-01-21T15:25:34.638+0800 writing admin.system.version to C:\data\admin\system.version.bson 2022-01-21T15:25:34.656+0800 done dumping admin.system.version (1 document) 2022-01-21T15:25:34.656+0800 writing test_db.test_data to C:\data\test_db\test_data.bson 2022-01-21T15:25:35.076+0800 done dumping test_db.test_data (100044 documents) ...
b)导入指定表的数据
C:\mongodb\Server\5.0\bin>mongodump -h 192.168.1.1 -d test_db -o C:\data 2022-01-21T15:25:34.656+0800 writing test_db.test_data to C:\data\test_db\test_data.bson 2022-01-21T15:25:35.076+0800 done dumping test_db.test_data (100044 documents) ...
2、mongoexport 和 mongoimport备份、还原表或字段
(1)mongoexport 导出表或字段
mongoexport -h IP地址 --port 端口号 -u 用户名 -p 密码 -d 数据库名称 -c 表名称 -f 字段 -q 条件导出 --csv -o 导出文件名
其中,有一些参数可以选择性调整,具体如下:
- -f :导出指字段,以英文逗号分割,例如:-f key1,key2,key3 分别导出 key1,key2,key3 这三个字段。
- -q :导出条件,可以写语句按照条件导出数据,例如:-q '{ "key1": "name" }' ,即导出 key1 为 name 的数据。
- --csv :导出csv格式的文件,如不需要可以不写。
参考示例:
a)导出整表数据到.txt文件
C:\mongodb\Server\5.0\bin>mongoexport -h 127.0.0.1 -d test_db -c test_table -o C:\data\test_table.txt 2022-03-01T18:27:47.555+0800 connected to: mongodb://127.0.0.1/ 2022-03-01T18:27:47.587+0800 exported 1 record
b)按条件导出部分字段内容到csv文件
C:\mongodb\Server\5.0\bin>mongoexport -h 127.0.0.1 -d test_db -c test_table -q "{\"name\":\"admin\"}" -f name,email,age --csv -o C:\data\test_table.csv 2022-03-01T19:21:41.774+0800 connected to: mongodb://127.0.0.1/ 2022-03-01T19:21:41.793+0800 exported 1 record
注意,这里遇到过一个坑,再此特意强调一下,希望大家注意:
在写条件语句时,官方给的示例是 “-q query filter, as a JSON string, e.g., '{x:{$gt:1}}'”,查阅了很多资料应该是用英文单引号,包裹着标准json字符串,后来我在window下做测试的时候,却报错了,报错内容如下:
C:\mongodb\Server\5.0\bin>mongoexport -h 127.0.0.1 -d test_db -c test_table -q '{"name":"admin"}' -f name,email,age -o C:\data\test_table.json 2022-03-01T19:28:41.678+0800 query '[39 123 117 115 101 114 110 97 109 101 58 97 100 109 105 110 125 39]' is not valid JSON: json: cannot unmarshal string into Go value of type map[string]interface {} 2022-03-01T19:28:41.696+0800 try 'mongoexport --help' for more information
查询了很多文章,有的说linux下是单引号包裹双引号,window下是双引号包裹单引号,修改后仍然报错,后来偶然中找到一篇文章(原博文地址)提到 “从MongoDB 4.2开始,查询必须采用扩展JSON v2格式(宽松或规范/严格模式),包括将字段名称和运算符括在引号中”,本文中的MongoDB 版本是5.0.5,所以说正确的格式是:
-q "{\"money\":{\"$gt\":1000}}"
另外,如果这种模式写起来比较不方便,建议使用 --queryFile 使用文件进行导入,这样就没有转义符的区别了。
C:\mongodb\Server\5.0\bin>mongoexport -h 127.0.0.1 -d test_db -c test_table --queryFile C:\query.txt -f name,email,age -o C:\data\test_table.json 2022-03-01T19:21:41.774+0800 connected to: mongodb://127.0.0.1/ 2022-03-01T19:21:41.793+0800 exported 1 record
query.txt内容如下:
{ "name":"admin" }
(2)mongoimport 导入表或字段
# 导入非csv文件 mongoimport -h IP地址 --port 端口号 -u 用户名 -p 密码 -d 数据库名称 -c 表名称 --upsert --file 文件路径 # 导入部分字段 mongoimport -h IP地址 --port 端口号 -u 用户名 -p 密码 -d 数据库名称 -c 表名称 --upsertFields 字段 --file 文件路径 # 导入CSV文件 mongoimport -h IP地址 --port 端口号 -u 用户名 -p 密码 -d 数据库名称 -c 表名称 --type 类型 --headerline --file 文件路径
同样,有一些参数需要说明一下,具体如下:
- --upsert:插入或者更新现有数据,如不添加则重复数据会报错。
- --type:要导入的文件格式,csv需要指明格式为:--type csv。
- -headerline:指明第一行是列名,不需要导入。
- --file:需要导入的文件路径。
参考示例:
a)导入表数据
C:\mongodb\Server\5.0\bin>mongoimport -h 127.0.0.1 -d test_db -c test_table --upsert --file C:\data\test_table.txt 2022-03-02T17:59:19.256+0800 connected to: mongodb://127.0.0.1/ 2022-03-02T17:59:19.284+0800 1 document(s) imported successfully. 0 document(s) failed to import.
b)导入部分字段数据
C:\mongodb\Server\5.0\bin>mongoimport -h 127.0.0.1 -d test_db -c test_table --upsertFields name,age --file C:\data\test_table.txt 2022-03-02T17:59:19.256+0800 connected to: mongodb://127.0.0.1/ 2022-03-02T17:59:19.284+0800 1 document(s) imported successfully. 0 document(s) failed to import.
c)导入CSV 数据
C:\mongodb\Server\5.0\bin>mongoimport -h 127.0.0.1 -d test_db -c test_table --type csv --headerline --file C:\data\test_table.csv 2022-03-02T17:59:19.256+0800 connected to: mongodb://127.0.0.1/ 2022-03-02T17:59:19.284+0800 1 document(s) imported successfully. 0 document(s) failed to import.
好了,以上便是一些比较常见的MongoDB数据批量导入导出的方法,其实还有很多参数和方法还需要慢慢研究,这里并没有完全写出来,后面有时间会出一期完整版,尽请期待。
“醉后不知天在水,满船清梦压星河。”哈哈哈,这篇文章是在一个微醺的下午完成的,天色渐晚,恰好意外的看到一张照片,海空一色的静谧深沉的蓝,湖中星星点点的光斑,一帆小船仿佛荡漾在银河里一般,如此美妙。介意此诗,献给每一个充满希望且还在努力奋斗的人,愿你们的梦想如此诗描述的景象一样如童话般诱人美妙。我是小眼睛优粥面,欢迎大家交流分享,并指正其中的错误,万分感谢。
这篇关于详谈MongoDB数据库的备份、还原、导入与导出的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15SendGrid 的 Go 客户端库怎么实现同时向多个邮箱发送邮件?-icode9专业技术文章分享
- 2024-11-15SendGrid 的 Go 客户端库怎么设置header 和 标签tag 呢?-icode9专业技术文章分享
- 2024-11-12Cargo deny安装指路
- 2024-11-02MongoDB项目实战:从入门到初级应用
- 2024-11-01随时随地一键转录,Google Cloud 新模型 Chirp 2 让语音识别更上一层楼
- 2024-10-25Google Cloud动手实验详解:如何在Cloud Run上开发无服务器应用
- 2024-10-24AI ?先驱齐聚 BAAI 2024,发布大规模语言、多模态、具身、生物计算以及 FlagOpen 2.0 等 AI 模型创新成果。
- 2024-10-20goland工具下,如修改一个项目的标准库SDK的版本-icode9专业技术文章分享
- 2024-10-17Go学习:初学者的简单教程
- 2024-10-17Go学习:新手入门完全指南