大家好,我是小眼睛优粥面,最近总是再用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 文件存储路径 

其中,有一些参数可以选择性调整,具体如下:

  1. 如果没有设置用户名和密码,-u 和 -p 内容可以去掉。
  2. 如果导出的是本机的数据库,-h 内容可以去掉。
  3. 如果是默认端口,--port 内容可以去掉。
  4. 如果想导出所有数据库,-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 导出文件名  

其中,有一些参数可以选择性调整,具体如下:

  1. -f :导出指字段,以英文逗号分割,例如:-f key1,key2,key3 分别导出 key1,key2,key3 这三个字段。
  2. -q :导出条件,可以写语句按照条件导出数据,例如:-q '{ "key1": "name" }' ,即导出 key1 为 name 的数据。
  3. --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 文件路径

同样,有一些参数需要说明一下,具体如下:

  1. --upsert:插入或者更新现有数据,如不添加则重复数据会报错。
  2. --type:要导入的文件格式,csv需要指明格式为:--type csv。
  3. -headerline:指明第一行是列名,不需要导入。
  4. --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数据库的备份、还原、导入与导出相关推荐

  1. 达梦数据库之备份还原

    如大家所知,网络安全越来越被重视,而在数据库方面我们不仅要在部署的时候做好相应的配置,还需要有一套容灾机制,即备份还原.下面我就分享一下在学习达梦数据库中关于备份还原的一些经验. 一.概念: 备份:数 ...

  2. 数据库自动备份还原成新库脚本

    数据库自动备份还原成新库脚本 BACKUP DATABASE [源数据库名] TO DISK = N'G:\testbackup.bak' WITH COMPRESSION,NOUNLOAD , NA ...

  3. centos下MongoDB数据库自动备份(linux)

    centos下没有可视化工具,这个时候对MONGODB数据库进行备份,我们需要借助脚本和定时任务来进行. 1.创建MongoDB备份目录 我们创建一个当前备份和备份列表文件夹 mkdir -p /da ...

  4. Hbase表两种数据备份方法-导入和导出示例

    Hbase表两种数据备份方法-导入和导出示例 本文将提供两种备份方法 -- 1) 基于Hbase提供的类对hbase中某张表进行备份 2) 基于Hbase snapshot数据快速备份方法 场合:由于 ...

  5. linux下达梦数据库导出dmp,DM7 达梦数据库 物理备份还原之 备份管理 操作手册

    1 概述 本篇主要了解如何使用 DMRMAN 工具管理数据库备份.表空间备份及表备份. 管理备份一个重要的目的是删除不再需要的备份.DMRMAN 工具提供 SHOW.CHECK.REMOVE.LOAD ...

  6. MySQL_DQL语句(分组,筛选)_数据库的备份/还原/约束

    DQL语句之分组查询:group by select 字段列表 from 表名 group by 分组字段名称; 注意事项: 1) 查询的字段列表中可以使用 分组字段 ; 2) group by之后不 ...

  7. C# MySQL数据库的备份 还原 初始化

    // 执行创建数据库操作 this.GetExecute(G_Con, "create database if not exists NEWDB"); this.sqlAddres ...

  8. SQL Server 数据库使用备份还原造成的孤立用户和对象名‘xxx’无效的错误的解决办法...

    在使用数据库的过程中,经常会碰到数据库迁移或者数据迁移的问题,或者有忽然的数据库损坏,这时需要从数据库的备份中直接恢复.但是,此时会出现问题,这里说明几种常见问题的解决方法. 本文链接:http:// ...

  9. 用shell脚本实现MongoDB数据库自动备份

    一.创建MongoDB备份目录 用来存放数据 mkdir -p /data/mongodb_bak/mongodb_bak_now mkdir -p /data/mongodb_bak/mongodb ...

最新文章

  1. 外部NORFlash是第一个以硬件为基础的信任
  2. windows下查看当前进程,杀掉进程等
  3. 【Java_多线程并发编程】JUC原子类——4种原子类
  4. Button的使用(十):ImageButton
  5. 高端技巧:怎样使用#define定义变量
  6. 代码之谜(二)- 语句与表达式
  7. @RequestMapping的使用
  8. JavaScript实现permutate With Repetitions重复排列算法(附完整源码)
  9. 如何在用例之间传递值_接口测试:A12_HttpRunner_cookie整理_01_提取指定cookie值
  10. 未来计算机将具有图像识别 定理证明,[单选] 低温计与高温计所测温度的分界线为()。...
  11. rails 两表关联查询_Rails中的单表继承与多态关联:找到适合您的方法
  12. mybatis-generator-maven-plugin插件自动生成代码的配置方法
  13. 为何优秀如程序员,也会构建 Bug 满格的软件?
  14. 深入理解ob_flush和flush的区别(转)
  15. 吃货少女走关西,美食小店大盘点
  16. Android for opencv(1)android使用opencv基本操作:读写 图片,操作像素等
  17. skiller v3 beta2 发布
  18. ESP32 学习笔记(七)I2S - Inter—IC Sound
  19. 机器学习实战:意大利Covid-19病毒感染数学模型及预测
  20. 这十个嵌入式工程师最青睐的树莓派扩展板让你受用半生

热门文章

  1. 成为成功技术领导的十条经验
  2. 绝!OpenAI 年底上新,单卡 1 分钟生成 3D 点云,text-to 3D 告别高算力消耗时代
  3. nonlocal关键字
  4. 七周数据分析03_Excel
  5. 5-HTML与CSS
  6. VuePress初学之利用模板theme创建一个个人博客网站
  7. UltraISO v9.5.3.2900
  8. KUOKUO的趣味教程 | 进击的小怪诞生(1)
  9. 智汀带你从业内人士的角度分析智能家居目前有哪些行业难题
  10. 聊聊数据安全,mybatis 如何有效预防脱库