前言
在工作中偶尔会遇到迁移数据等操作。比如如下场景:
- 数据库备份(容灾)
- 导出服务端数据(统计)
- 将服务端数据放入本地(搭建开发环境)
- 跨网段传输数据(网络不通)
不管你出于什么原因,一定要学一写数据迁移操作。
迁移工具
MongoDB提供了两个工具,分别用于数据的导出和导入:
- mongoexport
- mongoimport
这两个工具可以将数据库中的集合导出为CSV或者JSON格式的文件。
注意:迁移单位是”集合“,不是数据库、也不是某个文档。
这两个工具是命令行工具,并没有可视化界面。
接下来,我们需要了解这两个工具的参数,来对工具有一个宏观上的了解。
参数说明
命令行中输入如下命令,可以查看mongoexport的参数说明。
image.pngmongoexport --help
好在参数不多,我们可以逐项了解。
- 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: 如果指定此参数,在集合不存在时会报错
image.pngmongoimport --help
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]: 仅插入,跳过匹配的文档。插入新文档,或替换已经存在的文档。插入新文档,或修改已经存在的文档。删除匹配的文档。
网友评论