• MongoDB备份与恢复


    MongoDB备份与恢复

    1.备份恢复工具

    (1) mongoexport / mongoimport

    (2) mongodump / mongorestore

    2.备份工具区别

    应用场景总结:

    1.异构平台迁移 mysql的数据可以迁移到MOngoDB

    2.同平台,跨大版本:mongodb2 ----> mongodb 3

    mongoexport / mongoimport 可以到出格式为 json csv

    日常备份恢复时使用

    mongodump / mongorestore

    3.mongoexport导出工具命令

    mongoexport语法

    mongoexport --help  帮助
    参数说明:
    -h:指明数据库宿主机的IP
    -u:指明数据库的用户名
    -p:指明数据库的密码
    -d:指明数据库的名字
    -c:指明colletion(表)的名字
    -f:指明要导出那些列
    -o:指明要导出的文件名
    -q:指明导出数据的过滤条件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    4.导出MongoDB的表

    下面我们来举例导出操作

    4.1.创建备份的目录

    [root@localhost mongo_clusetr]# mkdir backup
    
    • 1

    4.2.登录数据库

    [root@localhost mongo_clusetr]# mongodb/bin/mongo db:28017
    
    • 1

    4.3.查询表和表中数据

    可以看到test库下的te表示有数据的

    dba1:PRIMARY> show dbs
    admin   0.000GB
    config  0.000GB
    local   0.000GB
    test    0.000GB
    dba1:PRIMARY> use db
    switched to db db
    dba1:PRIMARY> use test
    switched to db test
    dba1:PRIMARY> db
    test
    dba1:PRIMARY> show tables
    te
    test
    dba1:PRIMARY> db.te.find()
    { "_id" : ObjectId("636f63745a73f86992679cef"), "name" : "zhang", "age" : 10 }
    { "_id" : ObjectId("636f63be5a73f86992679cf0"), "name" : "gao", "age" : 11 }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    4.4.导出数据为json格式

    举例:

    可以看到已经可以查到数据了

    [root@localhost mongo_clusetr]# mongodb/bin/mongoexport --port 28017 -d test -c te -p backup/te.json
    
    [root@localhost mongo_clusetr]# ll backup/
    total 4
    -rw-r--r--. 1 root root 138 Nov 23 21:37 log.json
    
    • 1
    • 2
    • 3
    • 4
    • 5

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sTWjfYSP-1669217921495)(D:\linux笔记总结\mongoDB\MongoDB备份与恢复.assets\image-20221123213723320.png)]

    4.5.导出数据为csv格式

    举例:

    -f是指定需要导出那些字段  --type指定格式
    
    [root@localhost mongo_clusetr]# mongodb/bin/mongoexport --port 28017 -d test -c te --type=csv -f name,age -o /opt/mongo_clusetr/backup/log.csv
    
    • 1
    • 2
    • 3

    可以看到已经是查到两条数据了

    [root@localhost mongo_clusetr]# ll backup/
    total 8
    -rw-r--r--. 1 root root  25 Nov 23 21:40 log.csv
    -rw-r--r--. 1 root root 138 Nov 23 21:37 log.json
    
    • 1
    • 2
    • 3
    • 4

    5.mongoimport导入工具

    mongoimport --help
    参数说明:
    -h:指明数据库宿主机的IP
    -u:指明数据库的用户名
    -p:指明数据库的密码
    -d:指明数据库的名字
    -c:指明colletion(表)的名字
    -f:指明要导入那些列
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    5.1.恢复json格式数据

    可以把刚才导出的数据恢复

    可以恢复到别的库中查看一下,不删除原来的数据

    将导出格式为jsoon的数据恢复到另一个库中
    [root@localhost mongo_clusetr]# mongodb/bin/mongoimport --port 28017 -d gao -c te backup/log.json
    
    • 1
    • 2

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-p83utLAq-1669217921497)(D:\linux笔记总结\mongoDB\MongoDB备份与恢复.assets\image-20221123215904992.png)]

    5.2.登录数据库查看恢复情况

    可以看到已经恢复到了gao的库中

    dba1:PRIMARY> show dbs  
    admin   0.000GB
    config  0.000GB
    gao     0.000GB
    local   0.000GB
    test    0.000GB
    
    dba1:PRIMARY> use gao 
    switched to db gao
    @(shell):1:1
    
    dba1:PRIMARY> db
    gao
    
    dba1:PRIMARY> show tables
    te
    
    dba1:PRIMARY> db.te.find()
    { "_id" : ObjectId("636f63745a73f86992679cef"), "name" : "zhang", "age" : 10 }
    { "_id" : ObjectId("636f63be5a73f86992679cf0"), "name" : "gao", "age" : 11 }
    dba1:PRIMARY> 
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21

    5.3.导入csv格式的

    -c 指定表明 -d 库名 --type=csv格式  --file 路径
    
    [root@localhost mongo_clusetr]# mongodb/bin/mongoimport --port 28017 -d db -c te --type=csv -f name,age --file  /opt/mongo_clusetr/backup/log.csv
    
    • 1
    • 2
    • 3

    5.4查询导入的数据

    dba1:PRIMARY> show dbs
    admin   0.000GB
    config  0.000GB
    db      0.000GB
    gao     0.000GB
    local   0.000GB
    test    0.000GB
    
    dba1:PRIMARY> use db
    switched to db db
    
    dba1:PRIMARY> show tables
    te
    
    dba1:PRIMARY> db.te.find()
    { "_id" : ObjectId("637e295dc7f5fcd867772ca5"), "name" : "name", "age" : "age" }
    { "_id" : ObjectId("637e295dc7f5fcd867772ca6"), "name" : "zhang", "age" : 10 }
    { "_id" : ObjectId("637e295dc7f5fcd867772ca7"), "name" : "gao", "age" : 11 }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    6.csv格式可以用windows系统实用excel打开

    下载到本地即可

    [root@localhost mongo_clusetr]# cd backup/
    [root@localhost backup]# ls
    log.csv  log.json
    [root@localhost backup]# sz log.csv 
    
    • 1
    • 2
    • 3
    • 4

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NlJxPqAt-1669217921498)(D:\linux笔记总结\mongoDB\MongoDB备份与恢复.assets\image-20221123222236854.png)]

    7.整个数据库备份

    7.1.mongodump和mongorestore

    mongodump能够在mongdb运行时进行备份,它的工作原理是对运行的MongoDB做查询,然后将所有查到的文档写入磁盘。
    
    但是存在问题时使用mongodb产生的备份不一定是数据库的实时快照,如果我们在备份时对数据库进行了写入操作,则备份出来的文件可能不完全和 Mongodb 实时数据相等。另外在备份时可能会对其它客户端性能产生不利的影响。
    
    • 1
    • 2
    • 3

    7.2.命令参数

    mongodump --help
    参数说明:
    -h:指明数据库宿主机的IP
    -u:指明数据库的用户名
    -p:指明数据库的密码
    -d:指明数据库的名字
    -c:指明colletion(表)的名字
    -o:指明到要导出的文件名
    -q:指明导出数据的过滤条件
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    7.3.备份整个库

    #创建文件目录
    [root@localhost mongo_clusetr]# mkdir /data/backup
    
    #备份整个库
    [root@localhost mongo_clusetr]# mongodb/bin/mongodump --port 28017 -o /data/backup/
    
    #查询备份结果
    [root@localhost mongo_clusetr]# cd /data/backup/
    [root@localhost backup]# ls
    admin  db  gao  test
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    7.4.压缩的方式备份整个库

    为了防止备份数据过大,MongoDB是支持备份压缩的

    mongodb/bin/mongodump --port 28017 -o /data/backup/ --gzip
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lFc3Ap2O-1669217921499)(D:\linux笔记总结\mongoDB\MongoDB备份与恢复.assets\image-20221123224535045.png)]

    7.5.备份单个数据库

    和备份全库的命令是差不多的

    [root@localhost mongo_clusetr]# mongodb/bin/mongodump --port 28017 -d db -o /data
    
    • 1

    7.6.压缩的方式备份单个库

    [root@localhost mongo_clusetr]# mongodb/bin/mongodump --port 28017 -d db -o /data --gzip
    
    • 1

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lfCEEaFS-1669217921500)(D:\linux笔记总结\mongoDB\MongoDB备份与恢复.assets\image-20221123224905847.png)]

    8.恢复数据库

    删除数据库实验恢复操作

    8.1.删除db库

    已经删除db库

    ba1:PRIMARY> show dbs
    dba1:PRIMARY> use db
    dba1:PRIMARY> db.dropDatabase()
    
    • 1
    • 2
    • 3

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Hb2eRHv8-1669217921500)(D:\linux笔记总结\mongoDB\MongoDB备份与恢复.assets\image-20221123225314668.png)]

    8.2.使用备份恢复db库

    [root@localhost mongo_clusetr]# mongodb/bin/mongorestore --port 28017 -d db -o /data/db/
    
    恢复成功
    dba1:PRIMARY> show dbs
    admin   0.000GB
    config  0.000GB
    db      0.000GB
    gao     0.000GB
    local   0.000GB
    test    0.000GB
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    8.3.恢复成功再次使用命令报错

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eteUqrfO-1669217921501)(D:\linux笔记总结\mongoDB\MongoDB备份与恢复.assets\image-20221123230005393.png)]

    也可以使用命令后面加–dorp

    删除原有数据再次恢复

    不过不建议这么使用恢复

    [root@localhost mongo_clusetr]# mongodb/bin/mongorestore --port 28017 -d db   /data/backup/db/ -dorp
    
    • 1

    在这里插入图片描述

  • 相关阅读:
    python基于PHP+MySQL的小区物业管理系统
    神经网络系列---独热编码(One-Hot Encoding)
    工控机通过Profinet转Modbus RTU网关连接变频器与电机通讯案例
    Go实现日志2——支持结构化和hook
    唯一刊登学生历史学术论文的期刊
    Python: 公约数
    『现学现忘』Git分支 — 38、Git分支介绍
    支持JDK19虚拟线程的web框架,之四:看源码,了解quarkus如何支持虚拟线程
    【Linux】Nignx的入门&使用负载均衡&动静分离(前后端项目部署)---超详细
    【STL】string各种函数的应用
  • 原文地址:https://blog.csdn.net/qq_46020071/article/details/128010050