zoukankan      html  css  js  c++  java
  • MongoDB备份(mongoexport)与恢复(mongoimport)

    1.备份恢复工具介绍:

    1. mongoexport/mongoimport
    2. mongodump/mongorestore(本文未涉及)

    2.备份工具区别在哪里?

    2.1

    • mongoexport/mongoimport 导入/导出的是JSON格式或者CSV格式
    • mongodump/mongorestore 导入/导出的是BSON格式

    2.2

    JSON可读性强但体积较大,BSON则是二进制文件,体积小但对人类几乎没有可读性。

    2.3

    • 在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。
    • 当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项。
    • 跨版本的mongodump/mongorestore个人并不推荐,实在要做请先检查文档看两个版本是否兼容(大部分时候是的)

    2.4

    JSON虽然具有较好的跨版本通用性,但其只保留了数据部分,不保留索引,账户等其他基础信息。使用时应该注意。

    2.5

    • mongoexport不支持普通导出单个db的所有的collection
    • mongodump支持普通导出单个db的所有的collection

    3.应用场景总结:

    mongoexport/mongoimport

    1、异构平台迁移 mysql <---> mongodb
    2、同平台,跨大版本:mongodb2.x ---> mongodb3.x

    mongodump/mongorestore

    日常备份恢复时使用.

    4.版本介绍

    5.导出工具mongoexport

    • mongoexport工具可以把一个collection导出成JSON格式或CSV格式的文件。
    • 可以通过参数指定导出的数据项,也可以根据指定的条件导出数据。

    5.1 mongoexport关键参数如下所示:

    mongoexport --help查看帮助命令

    • -h,--host :代表远程连接的数据库地址,默认连接本地Mongo数据库;
    • --port:代表远程连接的数据库的端口,默认连接的远程端口27017;
    • -u,--username:代表连接远程数据库的账号,如果设置数据库的认证,需要指定用户账号;
    • -p,--password:代表连接数据库的账号对应的密码;
    • -d,--db:代表连接的数据库;
    • -c,--collection:代表连接数据库中的集合;
    • -f, --fields:代表集合中的字段,可以根据设置选择导出的字段;
    • --type:代表导出输出的文件类型,包括csv和json文件;
    • -o, --out:代表导出的文件名;
    • -q, --query:代表查询条件;
    • --skip:跳过指定数量的数据;
    • --limit:读取指定数量的数据记录;
    • --sort:对数据进行排序,可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列,如sort({KEY:1})。
    • --authenticationDatabase:指定用户鉴定库

    5.2 备份示例

    单表备份至json格式
    mongoexport -u -p --port 28019 --authenticationDatabase admin -d test -c customer -o /tmp/customer.json
    
    [root@zhouweibing tmp]# head customer.json 
    {"_id":{"$oid":"5ff55c6ac70afd201b763036"},"name":"user0"}
    {"_id":{"$oid":"5ff55c6ac70afd201b763037"},"name":"user1"}
    
    

    注:备份文件的名字和路径可以自定义,默认导出了JSON格式的数据。

    单表备份至csv格式
    mongoexport -u -p --port 28019 --authenticationDatabase admin -d replset -c customer --type=csv -f _id,name -o /tmp/customer.csv
    
    [root@zhouweibing tmp]# head customer.csv 
    _id,name
    ObjectId(5ff55c6ac70afd201b763036),user0
    ObjectId(5ff55c6ac70afd201b763037),user1
    
    

    6.导入工具mongoimport

    • mongoimport工具可以把一个特定格式文件中的内容导入到指定的collection中。
    • 该工具可以导入JSON格式数据,也可以导入CSV格式数据。

    6.1 mongoimport关键参数如下所示:

    mongoimport --help查看帮助命令

    • h,--host :代表远程连接的数据库地址,默认连接本地Mongo数据库;
    • --port:代表远程连接的数据库的端口,默认连接的远程端口27017;
    • -u,--username:代表连接远程数据库的账号,如果设置数据库的认证,需要指定用户账号;
      -p,--password:代表连接数据库的账号对应的密码;
    • -d,--db:代表连接的数据库;
    • -c,--collection:代表连接数据库中的集合;
    • -f, --fields:代表导入集合中的字段;
    • --type:代表导入的文件类型,包括csv和json,tsv文件,默认json格式;
    • --file:导入的文件名称;
    • --headerline:导入csv文件时,指明第一行是列名,不需要导入;
    • --authenticationDatabase:指定用户鉴定库

    6.2 恢复示例

    恢复json格式表数据到json
    mongoimport -u -p --port 28019 --authenticationDatabase admin -d test -c json /tmp/customer.json
    
    恢复csv格式的文件到csv

    (1)csv格式的文件头行,有列名字

    mongoimport -u -p --port 28019 --authenticationDatabase admin -d test -c csv --type=csv --headerline  /tmp/customer.csv
    

    (2)csv格式的文件头行,没有列名字

    mongoimport -u -p --port 28019 --authenticationDatabase admin -d test -c csv1 --type=csv -f _id,name  /tmp/customer1.csv
    

    注意:
    --headerline和-f不能同时使用

    7.异构平台迁移案例

    • mysql ---> mongodb
    • 将MySQL test库下data表导出成csv格式,再导入到mongodb

    7.1 开启mysql开启安全路径

    vim /etc/my.cnf   --->添加以下配置
    secure-file-priv=/tmp
    
    重启MySQL使配置生效
    

    7.2 导出mysql的data表数据

    select * from data limit 1000 into outfile "/tmp/data.csv" fields terminated by ',';
    

    7.3 添加列名信息到data.csv

    desc test.data;     #查看列名信息
    
    vim /tmp/data.csv   #在第一行添加列名信息
    
    d,com_pid,com_name,com_image,com_craw_url_leyu,add_time,status
    

    7.4 在mongodb中导入data.csv

    mongoimport -u -p --port 28019  --authenticationDatabase admin -d test -c data --headerline --type=csv /tmp/data.csv
    

    7.5 将MySQL world库下多张表导出

    select concat("select * from ",table_schema,".",table_name ," into outfile '/tmp/",table_schema,"_",table_name,".csv' fields terminated by ',';") from information_schema.tables where table_schema ='world';
    

    7.6 mysql导出csv格式转换:

    select * from test_info   
    into outfile '/tmp/test.csv'   
    fields terminated by ','    ------字段间以,号分隔
    optionally enclosed by '"'   ------字段用"号括起
    escaped by '"'           ------字段中使用的转义符为"
    lines terminated by '
    ';  ------行以
    结束
    

    因为有悔,所以披星戴月;因为有梦,所以奋不顾身! 个人博客首发:easydb.net 微信公众号:easydb 关注我,不走丢!

    image

  • 相关阅读:
    Jackcard类似度和余弦类似度(向量空间模型)的java实现
    Android Wear之android穿戴式设备应用开发平台
    poj 2955 Brackets 括号匹配 区间dp
    Gradle自己定义插件
    C语言之基本算法11—牛顿迭代法求平方根
    jquery ajax实现省市二级联动
    从0開始学习 GitHub 系列之「07.GitHub 常见的几种操作」
    Android Widget和悬浮窗 原理
    怎样推断一个数的二进制有多少个1
    Mac OSX Yosemite 10.10 brew 错误:mktemp: mkdtemp failed on /tmp/git-LIPo: No such file or directory
  • 原文地址:https://www.cnblogs.com/easydb/p/14264491.html
Copyright © 2011-2022 走看看