美文网首页
MongoDB数据库备份与恢复/导出与导入(十)

MongoDB数据库备份与恢复/导出与导入(十)

作者: simuty | 来源:发表于2017-03-30 13:50 被阅读1778次

    *** 目录**

    第一部分 备份数据
    1.1 语法
    1.2 参数
    1.3 实例
    第二部分 恢复数据
    2.1 语法
    2.2 参数
    2.3 实例
    第三部分 导出数据
    3.1 语法
    3.2 实例一[json格式]
    3.3 实例二[CVS格式]
    3.4 实例三[添加query]
    第四部分 导入数据
    4.1 语法
    4.2 参数
    4.3 实例一[CVS格式]
    4.4 实例二[JSON格式]
    
    

    第一部分 备份数据

    在Mongodb中我们使用mongodump命令来备份MongoDB数据。该命令可以导出所有数据到指定目录中。
    mongodump命令可以通过参数指定导出的数据量级转存的服务器。

    1.1 语法

    mongodump命令脚本语法如下:

    $ mongodump -h dbhost -d dbname -o dbdirectory
    
    1.2 参数
    1. -h:MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
    2. -d:需要备份的数据库实例,例如:test
    3. -o:备份的数据存放位置,例如:c:\data\dump,当然该目录需要提前建立,在备份完成后,系统自动在dump目录下建立一个test目录,这个目录里面存放该数据库实例的备份数据。
    
    1.3 实例
    #只导出test数据库到桌面
    $ sudo mongodump -h 127.0.0.1 -d test -o /Users/51testing/Desktop/
    
    2017-03-30T08:51:41.812+0800    writing test.numbers to 
    2017-03-30T08:51:41.812+0800    writing test.test2 to 
    2017-03-30T08:51:41.818+0800    writing test.users to 
    2017-03-30T08:51:41.819+0800    writing test.test1 to 
    2017-03-30T08:51:41.852+0800    done dumping test.test1 (3 documents)
    2017-03-30T08:51:41.852+0800    done dumping test.users (4 documents)
    2017-03-30T08:51:41.853+0800    done dumping test.test2 (100 documents)
    2017-03-30T08:51:42.748+0800    done dumping test.numbers (200000 documents)
    
    

    第二部分 恢复数据

    2.1 语法
    $ mongorestore -h <hostname><:port> -d dbname <path>
    
    2.2 参数
    --host <:port>, -h <:port>:MongoDB所在服务器地址,默认为: localhost:27017
    --db , -d :需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
    --drop:恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,慎用哦!
    <path>:mongorestore 最后的一个参数,设置备份数据所在位置,例如:c:\data\dump\test。你不能同时指定 <path> 和 --dir 选项,--dir也可以设置备份目录。
    --dir:指定备份的目录,你不能同时指定 <path> 和 --dir 选项。
    
    
    2.3 实例
    $ mongorestore -d test1 --dir /Users/51testing/Desktop/test
    

    注:
    因为默认的是localhost:27071,没有改端口号

    恢复之前

    > show dbs
    admin       0.000GB
    local       0.000GB
    shoppingdb  0.001GB
    test        0.006GB
    

    恢复之后

    > show dbs
    admin       0.000GB
    local       0.000GB
    shoppingdb  0.001GB
    test        0.006GB
    #datasize不一致
    test1       0.002GB
    
    为何datasize不一致?

    因为mongo是增量数据库, 初始化时默认分配空间,之后再根据需求增加,因为之前操作过大量数据,所以会出现这样的结果.

    第三部分 导出数据

    MongoDB中的mongoexport工具可以把一个库中的collection导出成JSON格式CSV格式的文件。可以通过指定的内置参数导出数据项,当然导出的时候可以排序和指定条件。

    查看mongo信息,安装位置/启动方法等

    $ brew info mongo
    

    mac 采用brew安装,位置/usr/local/Cellar/mongodb, 版本可能不同,依据查看的信息即可找到.

    $ cd /usr/local/Cellar/mongodb/3.4.0/bin
    $ ls 
    bsondump    mongodump   mongoimport mongorestore    mongotop
    mongo       mongoexport     mongooplog  mongos
    mongod      mongofiles  mongoperf   mongostat
    
    

    比如我们查看mongoexport的使用方法

    #即可
    $ ./mongoexport --help
    ....
    
    
    3.1 语法
    mongoexport -h dbhost -d dbname -c collectionName -o output
    
    
    -h  arg     主机
    --port arg  端口
    -u  arg     用户名
    -p  arg     密码
    -d  arg     数据库
    -c  arg     集合
    -f  arg     字段名 逗号隔开
    -q  arg     查询条件 json格式
    --csv       导出csv格式
    -o  arg     导出的文件名
    
    3.2 实例一[json格式]

    导出test数据库中的users集合,格式默认为json

    $ mongoexport -d test -c users -o /Users/51testing/Desktop/users
    2017-03-30T10:24:03.147+0800    connected to: localhost
    2017-03-30T10:24:03.147+0800    exported 4 records
    
    

    注意事项

    can not use --fields when input type is JSON
    
    3.3 实例二[csv格式]

    如果我们需要导出CSV格式的数据,则需要使用–csv参数,具体如下所示:

    CSV定义

    CSV (逗号分隔值文件格式): 逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。
    纯文本意味着该文件是一个字符序列,不含必须像二进制数字那样被解读的数据。
    CSV文件由任意数目的记录组成,记录间以某种换行符分隔;
    每条记录由字段组成,字段间的分隔符是其它字符或字符串,最常见的是逗号或制表符。通常,所有记录都有完全相同的字段序列。
    

    导出test数据库中的users集合中的"name,age"字段, 中间不可有空格

    $ mongoexport -d test -c users --type=csv -f "name,age" -o  /Users/51testing/Desktop/user_csv1
    
    2017-03-30T10:40:19.909+0800    connected to: localhost
    2017-03-30T10:40:19.909+0800    exported 4 records
    
    

    脑洞🔛----怎么全部导出所有字段????

    答案: 老实点, 一个个写吧.

    3.4 实例三[添加query]

    导出test数据库中的users集合中的"name,age"字段, 中间不可有空格, 并且只筛选age大于20的数据

    BWF-huanghaowei:bin 51Code$ mongoexport -d test -c users --type=csv -f "name,age" -q '{age:{$gt: 20}}' -o  /Users/51testing/Desktop/user_csv2
    
    2017-03-30T11:06:53.023+0800    connected to: localhost
    2017-03-30T11:06:53.047+0800    exported 1 record
    
    

    结果如下,满足以上的需求

    name,age
    lisi,29
    

    第四部分 导入数据

    4.1 语法

    Import CSV, TSV or JSON data into MongoDB

    mongoimport <options> <file>
    
    4.2 参数
    -d 数据库名
    -c collection名
    --type 导入的格式,默认json
    -f 导入的字段名
    --headerline 如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
    --file 要导入的文件
    
    
    4.3 实例一[导入CSV]

    将桌面上备份的数据(csv)[name,age]导入进--数据库improtdb中的集合importCol.
    默认的导入格式为json

    $ mongoimport -d improtdb -c importCol  --fields  name,age --file /Users/51testing/Desktop/user_csv1 --type csv
    2017-03-30T13:08:26.524+0800    connected to: localhost
    2017-03-30T13:08:26.606+0800    imported 4 documents
    

    终端中cmd + T开启新的标签, 进一步可以验证

    > show dbs
    > db.表名.find()
    
    4.4 实例二[导入json]

    导入json数据时不需要设置fields字段,

    $ mongoimport -d importJDB -c users --file /Users/51testing/Desktop/users 
    
    2017-03-30T13:44:44.166+0800    connected to: localhost
    2017-03-30T13:44:44.295+0800    imported 4 documents
    

    参考

    Database mongodb 导出导入数据不一致

    更多精彩内容请关注“IT实战联盟”哦~~~


    IT实战联盟.jpg

    相关文章

      网友评论

          本文标题:MongoDB数据库备份与恢复/导出与导入(十)

          本文链接:https://www.haomeiwen.com/subject/hcauottx.html