TH小破站

  • 首页
  • 容器
    • 认识Docker
    • DockerFile详解
  • k8s
    • 认识Kubernetes
    • Kubernetes部署--(kubeadm方式)
    • kubeasz部署k8s集群
    • Ansible-binary部署k8s集群-1.31.2
  • Ceph
    • 认识分布式存储
    • CPEH部署
  • CI/CD
    • DevOps认识
    • 部署--Gitlab
  • ELK
    • ELK简介
    • Elasticsearch
    • Kibana部署
    • Logstash
    • ELK--收集 tomcat 日志(实战)
  • HD
    • 认识--大数据
    • Hadoop-单机部署
    • Hadoop-伪分布部署
    • Hadoop-完全分布部署
    • Hadoop-(HA)完全分布部署
    • Ambari自动部署--Hadoop
  • Nginx
    • Nginx功能介绍
    • Nginx安全选项
    • Nginx配置文件简单介绍
    • 网站服务器部署
  • 监控
    • ZABBIX-部署(yum)
    • ZABBIX-编译安装
  • 云计算
    • KVM 概述
    • OpenStack企业级部署(T版)
    • OpenStack之dashboard部署
    • OpenStack-controller的高可用
    • openstack(Caracal版_ubuntu版本)部署
  • 数据库
    • mariadb与mysql
    • mysql主从
    • MySQL--冷备(实战)
    • MySQL--热备(dump表)
    • MySQL--热备(dump库)
    • 数据恢复实战案例
    • Xtrabackup实现MySql8.x全量备份
    • MyCat实现数据库读写分离
    • MHA实现数据库高可用
    • Percona XtraDB(PXC)实现数据库集群高可用
    • 数据库压力测试
    • PostgreSQL 基操
    • PostgreSQL备份恢复
    • PostgreSQL高可用
    • MongDB安装配置基础使用
    • MongoDB实现复制集
    • MongoDB备份还原
  • 自动化
    • ssh远程服务原理及配置
    • Ansible剧本文件应用
    • Ansible管理服务介绍
    • Ansible自动化部署node_exporter(包含升级,回滚)
    • Saltstack-部署安装
  • 脚本
    • 一键查看服务器资源利用率
    • 一键生成SSL证书
    • 保存指定数量的文件/目录
    • 初始化服务器
    • 扫描可用IP
    • 批量分发SSH密钥
    • 监控多主机磁盘脚本
    • 一键安装MySQL8.x脚本
    • Python脚本监控ES集群
    • 资源巡检脚本
    • 查看各用户使用的cpu占比
热衷于分享
架构师成长之路 !!!
  1. 首页
  2. 数据库
  3. 正文

MongoDB备份还原

2025年3月25日 1273点热度 0人点赞 0条评论

MongoDB备份还原

虽然有复制集的高可用性保证,数据丢失的可能很低,但仍然需要备份 备份的目的:

  • 防止硬件故障引起的数据丢失

  • 防止人为错误误删数据

  • 时间包溯

  • 监管要求

1.) 备份恢复工具介绍

mongoexport/mongoimport说明

mongoexport/mongoimport可以实现逻辑备份,类似于mysqldump,可以导出json或csv格式文件 应用场景总结

  • 异构平台迁移,比如:MySQL和MongoDB

  • 同平台跨大版本的MongoDB数据导出导入:比如mongodb2->mongodb3

mongodump/mongorestore说明

物理备份,日常备份恢复时使用,导出的二进制文件

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

mongodump出来的数据不能表示某个时间点,只是某个时间段

mongoexport/mongoimport与mongodump/mongorestore的对比

mongoexport/mongoimport导入/导出的是JSON格式

而mongodump/mongorestore导入/导出的是BSON格式,

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

在一些mongodb版本之间,BSON格式可能会随版本不同而有所不同,所以不同版本之间用mongodump/mongorestore可能不会成功,具体要看版本之间的兼容性。

当无法使用BSON进行跨版本的数据迁移的时候,使用JSON格式即mongoexport/mongoimport是一个可选项。

备份工具安装

下载工具地址:https://www.mongodb.com/try/download/database-tools

工具兼容性:https://www.mongodb.com/zh-cn/docs/database-tools/mongoexport/mongoexport-compatibility-and-installation/

 root@mongdb-1:~# tar xf mongodb-database-tools-ubuntu2204-x86_64-100.11.0.tgz -C /
 root@mongdb-1:~# cp  /mongodb-database-tools-ubuntu2204-x86_64-100.11.0/bin/* /usr/local/bin/

2.)mongoexport/mongoimport使用

导出工具mongoexport

mongoexport具体用法如下所示:

 参数说明:
 -h #指明数据库宿主机的IP
 -u #指明数据库的用户名
 -p #指明数据库的密码
 -d #指明数据库的名字
 -c #指明collection(表)的名字
 -f #指明要导出那些列
 -o #指明到要导出的文件名
 -q #指明导出数据的过滤条件
 --type=csv 或 --csv #指定导出为csv格式,默认json格式
 --authenticationDatabase <验证库> #指定验证库

范例:

 myrepl [direct: primary] test> show databases
 admin   220.00 KiB
 config  272.00 KiB
 local   552.00 KiB
 test    156.00 KiB
 myrepl [direct: primary] test> show collections
 teacher
 myrepl [direct: primary] test> show tables
 teacher
 ​
 #单表备份至json格式
 root@mongdb-1:~# mongoexport -uroot -p123456 --port 27017 --authenticationDatabase admin -d test -c teacher -o /mongodb/teacher.json
 2025-03-05T21:06:41.659+0800    connected to: mongodb://localhost:27017/
 2025-03-05T21:06:41.682+0800    exported 999 records
 root@mongdb-1:~# head /mongodb/teacher.json  -n 2
 {"_id":{"$oid":"67c71b777d36d2901c51e945"},"uid":1,"name":"tang1","age":18,"date":{"$date":"2025-03-04T15:25:43.251Z"}}
 {"_id":{"$oid":"67c71b777d36d2901c51e946"},"uid":2,"name":"tang2","age":18,"date":{"$date":"2025-03-04T15:25:43.257Z"}}
 ​
 #单表备份至csv格式,则需要使用--type=csv参数(test库的teacher 字段uid,name,age,date做为CSV表头)
 root@mongdb-1:~# mongoexport -uroot -p123456 --port 27017 --authenticationDatabase admin -d test -c teacher --type=csv -f uid,name,age,date -o /mongodb/teacher.csv
 ​
 root@mongdb-1:~# head /mongodb/teacher.csv  -n3
 uid,name,age,date
 1,tang1,18,2025-03-04T15:25:43.251Z
 2,tang2,18,2025-03-04T15:25:43.257Z

导入工具mongoimport

 参数说明:
 mongoimport --help
 -h #指明数据库宿主机的IP
 -u #指明数据库的用户名
 -p #指明数据库的密码
 -d #指明数据库的名字
 -c #指明collection(表)的名字
 -f #指明要导出那些列
 --type=csv 或 --csv #指定导入为csv格式,默认json格式
 -j,--numInsertionworkers=<number> #同时插入的数量,默认为
 --authenticationDatabase <验证库> #指定验证库
 --headerline #指明第一行是列名,不需要导入

范例: 数据恢复

 # 还原
 # 删除表数据
 myrepl [direct: primary] test> db.teacher.drop()
 true
 myrepl [direct: primary] test> db.teacher.countDocuments()
 0
 #导入json格式表数据到test库的teacher表中
 root@mongdb-1:~# mongoimport -uroot -p123456 --port 27017 --authenticationDatabase admin -d test -c teacher /mongodb/teacher.json
 ​
 myrepl [direct: primary] test> db.teacher.countDocuments()
 999
 ​
 #导入CSV格式表数据到test库的teacher表中(#导入标准的csv格式(文件第一行有列名字)的文件到teacher表中)
 root@mongdb-1:~# mongoimport -uroot -p123456 --port 27017 --authenticationDatabase admin -d test -c teacher --type=csv --headerline --file /mongodb/teacher.csv
 ​
 # 导入非标准的csv格式(第一行没有列名字)的文件到teacher表中
 # (前提导出时不带表头)
 root@mongdb-1:~# mongoimport -uroot -p123456 --port 27017 --authenticationDatabase admin -d test -c teacher --type=csv -f uid,name,age,date --file /mongodb/teacher.csv

3.) mongodump/mongorestore使用

mongodump备份

 -h #指明数据库宿主机的IP
 -u #指明数据库的用户名
 -p #指明数据库的密码
 -d #指明数据库的名字
 -c #指明collection(表)的名字
 -o #指明到要导出的文件名
 -q #指明导出数据的过滤条件
 --authenticationDatabase #验证数据的名称
 --gzip #备份时压缩
 --oplog # 启动副本集上拍摄时间点快照

范例:mongodump

 #全库备份
 #注意:完全备份不会备份config和local库,但会备份admin库和test库及用户库
 root@mongdb-1:~# mkdir -p /backup/full
 root@mongdb-1:~# mongodump -uroot -p123456 --port 27017 --authenticationDatabase admin -o /backup/full
 root@mongdb-1:~# tree /backup/full/
 /backup/full/
 ├── admin
 │   ├── system.users.bson
 │   ├── system.users.metadata.json
 │   ├── system.version.bson
 │   └── system.version.metadata.json
 ├── config
 │   ├── settings.bson
 │   └── settings.metadata.json
 └── test
     ├── teacher.bson
     └── teacher.metadata.json
 ​
 #备份指定库test
 root@mongdb-1:~# mkdir -p /backup/test_db
 root@mongdb-1:~# mongodump -uroot -p123456 --port 27017 --authenticationDatabase admin -d test -o /backup/test_db
 2025-03-05T21:43:45.513+0800    writing test.teacher to /backup/test_db/test/teacher.bson
 2025-03-05T21:43:45.516+0800    done dumping test.teacher (999 documents)
 root@mongdb-1:~# tree /backup/test_db/
 /backup/test_db/
 └── test
     ├── teacher.bson
     └── teacher.metadata.json
 ​
 #备份test库下的teacher集合(表)
 root@mongdb-1:~# mkdir -p /backup/test_db_teather
 root@mongdb-1:~# mongodump -uroot -p123456 --port 27017 --authenticationDatabase admin -d test -c teacher -o /backup/test_db_teather
 2025-03-05T21:45:44.797+0800    writing test.teacher to /backup/test_db_teather/test/teacher.bson
 2025-03-05T21:45:44.799+0800    done dumping test.teacher (999 documents)
 root@mongdb-1:~# tree /backup/test_db_teather
 /backup/test_db_teather
 └── test
     ├── teacher.bson
     └── teacher.metadata.json
 ​
 #完全备份并压缩备份
 root@mongdb-1:~# mkdir -p /backup/full_gzip
 root@mongdb-1:~# mongodump -uroot -p123456 --port 27017 --authenticationDatabase admin -o /backup/full_gzip --gzip
 2025-03-05T21:47:18.887+0800    writing admin.system.users to /backup/full_gzip/admin/system.users.bson.gz
 ...
 2025-03-05T21:47:18.898+0800    done dumping test.teacher (999 documents)
 root@mongdb-1:~# tree /backup/full_gzip/
 /backup/full_gzip/
 ├── admin
 │   ├── system.users.bson.gz
 │   ├── system.users.metadata.json.gz
 │   ├── system.version.bson.gz
 │   └── system.version.metadata.json.gz
 ├── config
 │   ├── settings.bson.gz
 │   └── settings.metadata.json.gz
 └── test
     ├── teacher.bson.gz
     └── teacher.metadata.json.gz
 ​

mongorestore还原

 -h #指明数据库宿主机的IP
 -u #指明数据库的用户名
 -p #指明数据库的密码
 -d #指明数据库的名字
 -c #指明collection(表)的名字
 -q #指明导出数据的过滤条件
 --authenticationDatabase#验证数据的名称
 --gzip #备份时压缩
 --oplogReplay #恢复完数据文件后再重放oplog。默认重放dump/oplog.bson
 --oplogFile=<filename> #指定需要重放的op10g文件位置
 --oplogLimit=<seconds>[:ordinal] #重放op10g 时截止到指定时间点
 --drop #恢复的时候把之前的集合dr op掉

范例: mongorestore

 #恢复完全备份
 root@mongdb-1:~# mongorestore -uroot -p123456 --port 27017 --authenticationDatabase admin /backup/full
 ​
 #从完全备份的压缩备份中的test库恢复至test1库
 root@mongdb-1:~# mongorestore -uroot -p123456 --port 27017 --authenticationDatabase admin -d test1 /backup/full_gzip/test/ --gzip
 2025-03-05T21:54:49.703+0800    The --db and --collection flags are deprecated for this use-case; please use --
 ...
 2025-03-05T21:54:49.757+0800    999 document(s) restored successfully. 0 document(s) failed to restore.
 ​
 myrepl [direct: primary] test> use test1
 switched to db test1
 myrepl [direct: primary] test1> db.teacher.find().limit(2)
 [
   {
     _id: ObjectId('67c8517fb39473133aaacf42'),
     uid: 1,
     name: 'tang1',
     age: 18,
     date: '2025-03-04T15:25:43.251Z'
   },
   {
     _id: ObjectId('67c8517fb39473133aaacf43'),
     uid: 2,
     name: 'tang2',
     age: 18,
     date: '2025-03-04T15:25:43.257Z'
   }
 ​
 ​
 #从完全备份中的teacher表恢复到test库中的test库的表teacher1中
 root@mongdb-1:~# mongorestore -uroot -p123456 --port 27017 --authenticationDatabase admin -d test -c teacher1 --gzip /backup/full_gzip/test/teacher.bson.gz 
 2025-03-05T21:56:42.597+0800    The --db and --collection flags are deprecated for this use-case; please use --nsInclude instead, i.e. with --nsInclude=${DATABASE}.${COLLECTION}
 ...
 2025-03-05T21:56:42.661+0800    999 document(s) restored successfully. 0 document(s) failed to restore.
 ​
 myrepl [direct: primary] test1> use test
 switched to db test
 myrepl [direct: primary] test> db.teacher1.find().limit(1)
 [
   {
     _id: ObjectId('67c8517fb39473133aaacf42'),
     uid: 1,
     name: 'tang1',
     age: 18,
     date: '2025-03-04T15:25:43.251Z'
   }
 ]
 ​
 ​
 #默认不允许覆盖恢复会报错,可以使用选项--drop实现覆盖恢复,表示恢复的时候先之前的集合drop掉(危险),再恢复
 root@mongdb-1:~# mongorestore  -uroot -p123456 --port 27017 --authenticationDatabase admin -d test --drop /backup/full
标签: 暂无
最后更新:2025年3月25日

tanghao946

这个人很懒,什么都没留下

点赞
< 上一篇

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复
文章目录
  • MongoDB备份还原
    • 1.) 备份恢复工具介绍
      • mongoexport/mongoimport说明
      • mongodump/mongorestore说明
      • mongoexport/mongoimport与mongodump/mongorestore的对比
      • 备份工具安装
    • 2.)mongoexport/mongoimport使用
      • 导出工具mongoexport
      • 导入工具mongoimport
    • 3.) mongodump/mongorestore使用
      • mongodump备份
      • mongorestore还原

COPYRIGHT © 2025 TH小破站. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

渝ICP备2023013789号

渝公网安备50011702500926号