当前位置: 首页 > news >正文

【mongodb】mongodb数据备份与恢复

 本站以分享各种运维经验和运维所需要的技能为主

《python零基础入门》:python零基础入门学习

《python运维脚本》: python运维脚本实践

《shell》:shell学习

《terraform》持续更新中:terraform_Aws学习零基础入门到最佳实战

《k8》暂未更新

《docker学习》暂未更新

《ceph学习》ceph日常问题解决分享

《日志收集》ELK+各种中间件

《运维日常》运维日常

《linux》运维面试100问

Mongodb 数据备份与恢复

一、备份与恢复数据

1.备份恢复工具

1.mongoexport/mongoimport       #数据分析时使用
2.mongodump/mongorestore        #单纯备份时使用

2.导出工具mongoexport

#备份成json格式
[mongo@redis03 ~]$ mongoexport --port 28018 -d test -c testtable -o ~/table.json
​
[mongo@redis03 ~]$ mongoexport -uadmin -p123456 --port 27017 --authenticationDatabase admin -d database -c table -o ~/table.json
​
#备份成csv格式
[mongo@redis03 ~]$ mongoexport --port 27017 -d database -c table --type=csv -f name,age -o ~/table.csv
​
[mongo@redis03 ~]$ mongoexport -uadmin -p123456 --port 27017 --authenticationDatabase admin -d database -c table --type=csv -f name,age -o ~/table.csv
​
​
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明集合的名字
-f:指明要导出那些列
-o:指明到要导出的文件名
-q:指明导出数据的过滤条件
--type:指明导出数据的类型

3.恢复工具mongoimport

#删除集合
> use database
switched to db database
> show tables
table
> db.table.drop()
true
​
#恢复数据
[mongo@redis03 ~]$ mongoimport --port 27017 -d database -c table ~/table.json
​
[mongo@redis03 ~]$ mongoimport --port 27017 -d database -c table --type=csv --headerline --file ~/table.csv
​
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明集合的名字
-f:指明要导入那些列

4.生产案例:MySQL数据迁移至mongodb

1)搭建数据库

2)导入数据

3)配置数据库

#开启安全路径
[root@redis04 ~]# vim /etc/my.cnf
​
[mysqld]
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
secure-file-priv=/tmp
​
#重启数据库
[root@redis04 ~]# systemctl restart mysql

4)将数据库导出成csv

#使用第三方工具导出csv表格
mysql> select * from world.city into outfile '/tmp/city1.csv' fields terminated by ',';

5)查看文件

[root@redis04 ~]# cat /tmp/city1.csv

6)手动处理文件

#将数据库字段加到文件的第一行
[root@redis04 ~]# vim /tmp/city.csv
ID,Name,CountryCode,District,Population
1,Kabul,AFG,Kabol,1780000
2,Qandahar,AFG,Qandahar,237500

7)将数据导入mongodb

[root@redis04 ~]# scp /tmp/city1.csv 172.16.1.93:/tmp/
​
[mongo@redis03 ~]$ mongoimport -uadmin -p123456 --port 27017 --authenticationDatabase admin -d world -c city --type=csv --headerline --file /tmp/city1.csv

8)查看数据

[mongo@redis03 ~]$ mongo -uadmin -p123456 --authenticationDatabase admin
> show dbs
admin   0.000GB
config  0.000GB
local   0.000GB
read    0.000GB
world   0.000GB
write   0.000GB
> use world
switched to db world
> show tables
city
> db.city.find()
......
> it

5.生产案例:数据误删除恢复

1)过程

每天凌晨1点进行全备
10点进行误操作,删除了数据
恢复数据

2)模拟全备数据

#连接副本集的主库(只有在副本集模式才能使用mongodump)
[mongo@redis03 ~]$ mongo localhost:28018
dba:PRIMARY> use backup
dba:PRIMARY> db.backuptable.insertMany([{id:1},{id:2},{id:3}])
{"acknowledged" : true,"insertedIds" : [ObjectId("5ecfe698e99e372e2e4fe1fd"),ObjectId("5ecfe698e99e372e2e4fe1fe"),ObjectId("5ecfe698e99e372e2e4fe1ff")]
}
dba:PRIMARY> db.backuptable.find()
{ "_id" : ObjectId("5ecfe698e99e372e2e4fe1fd"), "id" : 1 }
{ "_id" : ObjectId("5ecfe698e99e372e2e4fe1fe"), "id" : 2 }
{ "_id" : ObjectId("5ecfe698e99e372e2e4fe1ff"), "id" : 3 }

3)执行全备

[mongo@redis03 ~]$ mongodump --port 28018 --oplog -o /data[mongo@redis03 ~]$ ll /data/oplog.bson 
-rw-rw-r-- 1 mongo mongo 110 May 29 02:01 /data/oplog.bson

4)模拟增量数据

[mongo@redis03 ~]$ mongo 10.0.0.93:28018
dba:PRIMARY> use backup
switched to db backup
dba:PRIMARY> db.backuptable.insertMany([{id:4},{id:5},{id:6}])
{"acknowledged" : true,"insertedIds" : [ObjectId("5ecfe86f5c1085fcf692a3cb"),ObjectId("5ecfe86f5c1085fcf692a3cc"),ObjectId("5ecfe86f5c1085fcf692a3cd")]
}

5)删除数据

dba:PRIMARY> use backup
switched to db backup
dba:PRIMARY> db.backuptable.drop()
true
dba:PRIMARY> show tables

7)oplog

oplog是local库下的一个固定集合,从库就是通过查看主库的oplog这个集合来进行复制的。每个节点都有oplog,记录这从主节点复制过来的信息,这样每个成员都可以保证切换主库时的数据同步

6)查找删除动作的时间点

#连接mongodb
[mongo@redis03 ~]$ mongo 10.0.0.93:28018
#切换到local库
dba:PRIMARY> use local
#查看oplog信息
dba:PRIMARY> db.oplog.rs.find()
dba:PRIMARY> db.oplog.rs.find().pretty()
{   #同步的时间点,选举时会选择最新的时间戳提升为主库"ts" : Timestamp(1590640219, 1),"t" : NumberLong(1),"h" : NumberLong("-8962736529514397515"),"v" : 2,#操作类型 i代表insert u代表update d代表delete n代表没有操作只是保持连接发送消息"op" : "n",#当前数据库的库、表"ns" : "","wall" : ISODate("2020-05-28T04:30:19.080Z"),#操作的内容"o" : {"msg" : "periodic noop"}
}#oplog信息
dba:PRIMARY> rs.printReplicationInfo()
configured oplog size:   1024MB                                 #oplog文件大小
log length start to end: 1543secs (0.43hrs)                     #oplog日志的启用时间段
oplog first event time:  Wed May 27 2020 23:26:46 GMT+0800 (CST)    #第一个事务日志的产生时间
oplog last event time:   Wed May 27 2020 23:52:29 GMT+0800 (CST)    #最后一个事务日志的产生时间
now:                     Wed May 27 2020 23:52:38 GMT+0800 (CST)    #现在的时间#查找到删除的时间点
dba:PRIMARY> db.oplog.rs.find({ns:"backup.$cmd"}).pretty()
{"ts" : Timestamp(1590683811, 1),"t" : NumberLong(2),"h" : NumberLong("3968458855036608631"),"v" : 2,"op" : "c","ns" : "backup.$cmd","ui" : UUID("bec471f5-cd2a-44fe-8056-4c5c2de5de03"),"wall" : ISODate("2020-05-28T16:36:51.227Z"),"o" : {"drop" : "backuptable"}
}1590683811

7)备份最新的oplog

[mongo@redis03 ~]$ mongodump --port 28018 -d local -c oplog.rs -o /data/[mongo@redis03 ~]$ ll /data/local/
total 140
-rw-rw-r-- 1 mongo mongo 138093 May 29 00:56 oplog.rs.bson
-rw-rw-r-- 1 mongo mongo    125 May 29 00:56 oplog.rs.metadata.json

8)把原来的全备备份

[mongo@redis03 data]$ mv oplog.bson oplog.bson.bak
[mongo@redis03 ~]$ mv /data/local/oplog.rs.bson /data/oplog.bson

9)恢复数据

#删掉新备份的库数据,否则会覆盖
[mongo@redis03 data]$ rm -rf /data/local
#恢复到指定时间点的数据
[mongo@redis03 data]$ mongorestore --port 28018 --oplogReplay --oplogLimit "1590690412:1" --drop /data/

10)查看数据

[mongo@redis03 ~]$ mongo localhost:28018
dba:PRIMARY> show databases
dba:PRIMARY> use backup
switched to db backup
dba:PRIMARY> show tables;
dba:PRIMARY> db.backuptable.find()

6.mongo升级

1.首先确保是副本集状态
2.先关闭1个副本节点
3.检测数据是否可以升级
4.升级副本节点的可执行文件
5.更新配置文件
6.启动升级后的副本节点
7.确保集群工作正常
8.滚动升级其他副本节点
9.最后主节点降级
10.确保集群 可用
11.关闭降级的老的主节点
12.升级老的主节点
13.重新加入集群

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 第十九天培训笔记
  • 职升网:中级经济师如何更好的选择专业?
  • Docker镜像仓库
  • R语言统计分析——自编函数
  • 盘点那些实用的开发技术!!
  • 扎克伯格说Meta训练Llama 4所需的计算能力是Llama 3的10倍
  • 【Mind+】掌控板入门教程01 “秀”出我创意
  • slf4j 日志框架的使用方法
  • 理想发周榜,不是新能源市场的原罪
  • Blackcat V2.2付费会员制WordPress资源站主题
  • Python应用—利用opencv实现图像匹配
  • 【杂谈】在大学如何学得计算机知识,浅谈大一经验总结
  • VMware Workstation 17 图文安装教程
  • 【Qt】QDateTimeEdit
  • 一刷代码随想录(贪心5)
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • Babel配置的不完全指南
  • Brief introduction of how to 'Call, Apply and Bind'
  • CSS进阶篇--用CSS开启硬件加速来提高网站性能
  • leetcode讲解--894. All Possible Full Binary Trees
  • maya建模与骨骼动画快速实现人工鱼
  • nodejs调试方法
  • Service Worker
  • Spring声明式事务管理之一:五大属性分析
  • SQLServer之索引简介
  • Transformer-XL: Unleashing the Potential of Attention Models
  • Webpack 4x 之路 ( 四 )
  • 基于Mobx的多页面小程序的全局共享状态管理实践
  • 基于组件的设计工作流与界面抽象
  • 每天一个设计模式之命令模式
  • 设计模式 开闭原则
  • 小程序上传图片到七牛云(支持多张上传,预览,删除)
  • 一个普通的 5 年iOS开发者的自我总结,以及5年开发经历和感想!
  • Oracle Portal 11g Diagnostics using Remote Diagnostic Agent (RDA) [ID 1059805.
  • AI算硅基生命吗,为什么?
  • const的用法,特别是用在函数前面与后面的区别
  • linux 淘宝开源监控工具tsar
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • #Java第九次作业--输入输出流和文件操作
  • #Z2294. 打印树的直径
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (cos^2 X)的定积分,求积分 ∫sin^2(x) dx
  • (Java入门)抽象类,接口,内部类
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (分享)自己整理的一些简单awk实用语句
  • (黑马点评)二、短信登录功能实现
  • (六)Hibernate的二级缓存
  • (算法)大数的进制转换
  • (五)MySQL的备份及恢复
  • (一)eclipse Dynamic web project 工程目录以及文件路径问题
  • (转)Android学习系列(31)--App自动化之使用Ant编译项目多渠道打包
  • (转)iOS字体
  • .htaccess配置重写url引擎