十、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]: 仅插入,跳过匹配的文档。插入新文档,或替换已经存在的文档。插入新文档,或修改已经存在的文档。删除匹配的文档。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

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

友情链接更多精彩内容