十、MongoDB数据迁移工具介绍

前言

在工作中偶尔会遇到迁移数据等操作。比如如下场景:

  • 数据库备份(容灾)
  • 导出服务端数据(统计)
  • 将服务端数据放入本地(搭建开发环境)
  • 跨网段传输数据(网络不通)

不管你出于什么原因,一定要学一写数据迁移操作。

迁移工具

MongoDB提供了两个工具,分别用于数据的导出和导入:

  • mongoexport
  • mongoimport

这两个工具可以将数据库中的集合导出为CSV或者JSON格式的文件。
注意:迁移单位是”集合“,不是数据库、也不是某个文档。

这两个工具是命令行工具,并没有可视化界面。
接下来,我们需要了解这两个工具的参数,来对工具有一个宏观上的了解。

参数说明

命令行中输入如下命令,可以查看mongoexport的参数说明。

mongoexport --help

image.png

好在参数不多,我们可以逐项了解。

  • general options(常见选项):
    • --help: 帮助文档
    • --version: 查看工具版本号
    • --config=: 配置文件的路径
  • verbosity options(细节选项):
    • -v, --verbose=<level>: 详细的日志输出
    • --quiet: 隐藏所有输出。
  • connection options(连接选项):
    • -h, --host=<hostname>: 要连接的Mongo服务器地址
    • --port=<port>: Mongo服务端口号,可以和--host参数一同使用,例如,--host hostname:port
  • ssl options(SSL选项):
    • --ssl: 通过SSL协议连接Mongo,前提是Mongo需要开启SSL
    • --sslCAFile=<filename>: 包含根证书的.pem文件
    • --sslPEMKeyFile=<filename>: 包含秘钥和证书的.pem文件
    • --sslPEMKeyPassword=<filename>: 解密sslPEMKeyFile文件的密码
    • --sslCRLFile=<filename>: 没理解
    • --sslFIPSMode: 使用FIPS模式替代openssl库
    • --tlsInsecure: 绕过服务器证书验证
  • authentication options(认证选项):
    • -u, --username=<username>: MongoDB用户名
    • -p, --password=<password>: MongoDB密码
    • --authenticationDatabase=<database-name> : 需要账号密码校验后连接的数据库
    • --authenticationMechanism=<mechanism>: 没理解
    • --awsSessionToken=<aws-session-token>: 通过亚马逊IAM(身份角色)的令牌
  • kerberos options(不安全网络环境选项):
    • --gssapiServiceName=<service-name>: 当使用GSSAPI或者Kerberos协议时的服务名。
    • --gssapiHostName=<host-name>: 当使用GSSAPI或者Kerberos协议时的主机名。
  • namespace options(命名空间选项):
    • -d, --db=<database-name>: 数据库名称
    • -c, --collection=<collection-name>: 集合名称
  • uri options(连接字符串选项):
    • --uri=<mongodb-uri>: 连接mongo时使用的字符串
  • output options(输出选项):
    • -f, --fields=<field>[,<field>]*: 导出的字段名称,如果有多个字段用逗号隔开
    • --fieldFile=<filename>: 没理解。
    • --type=<type>: 导出文件的格式,支持json或者csv
    • -o, --out=<filename>:导出的文件名
    • --jsonArray: 输出为json数组格式,而非每行一个文档对象
    • --pretty: 输出时格式化json
    • --noHeaderLine: 导出为csv格式时,是否包含字段名作为csv第一行(不加此参数是带字段名的)
    • --jsonFormat=<type>: 没理解
  • querying options(查询选项):
    • -q, --query=<json>: 支持json格式的筛选条件,导出筛选后的数据
    • --queryFile=<filename>: 存放json格式的筛选条件,从文件中读取查询条件。
    • --readPreference=<string>|<json>: 没理解
    • --forceTableScan: 没理解
    • --skip=<count>: 跳过前N个文档
    • --limit=<count>: 导出N个文档
    • --sort=<json>: 对导出的数据排序,例如 '{x:1}'
    • --assertExists: 如果指定此参数,在集合不存在时会报错

mongoimport --help

image.png

mongoimport的大部分参数和mongoexport是一样的,我们仅看一下不一样的部分即可。

  • input options(输入选项):
    • -f, --fields=<field>[<field>, ]*: 限定导入的字段,如果有多个字段用逗号隔开
    • --fieldFile=<filename>: 可以将字段名写入文件中,然后通过此文件来指定导入的字段名
    • --file=<filename>: 从文件中导入数据到数据库
    • --headerlien: 用文件的第一行作为字段名称,仅导入csv文件时可用
    • --jsonArray: 将输入的数据源看做json数组
    • --parseGrace=<grace>: 输入数据类型错误时,4种模式可选,"autoCast"(自动转换), "skipField"(跳过字段), "skipRow"(跳过此文档/行),"stop"(停止,默认选项)
    • --type=<type>: 数据文件的格式,csv、json、tsv
    • --columnHaveType: 没看懂
    • --legacy: 校验json格式是否合法
    • --useArrayIndexFields: 没看懂
  • ingest options(摄入选项):
    • --drop: 插入数据前先删除集合
    • --ignoreBlanks: 忽略csv文件中的空行
    • --maintainInsertionOrder: 保证文档插入顺序
    • --numInsertionWorkers=<number>: 并发插入,指定线程数量
    • --stopOnError: 发生错误时停止
    • --mode=[insert|upsert|merge|delete]: 仅插入,跳过匹配的文档。插入新文档,或替换已经存在的文档。插入新文档,或修改已经存在的文档。删除匹配的文档。
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容

  • 一、MongoDB简介 C++语言编写,基于分布式文件存储,开源数据库; 在高负载情况下,保证服务器性能 为web...
    qianxun0921阅读 212评论 0 1
  • Mongodb的特点: 模式自由:可以把不同结构的文档存储在同一个数据库里 面向集合的储存:适合储存JSON风格文...
    姓高名旭升阅读 733评论 0 0
  • Mongodb的特点: 模式自由:可以把不同结构的文档存储在同一个数据库里 面向集合的储存:适合储存JSON风格文...
    浮_屠阅读 2,627评论 0 0
  • # MongoDB ## 数据库分类 ### 关系型数据库 * 具备ACID特性 * Atomic原子性,也就...
    奥利奥_4e9e阅读 535评论 0 0
  • 2.1 导入导出工具说明 2.1.1 使用Gpfdist服务 GPFDIST是emc工程师推荐的最快的导入导...
    Michael_林阅读 4,558评论 0 3