//雪花飘落特效 //右上角github跳转   

MongoDB备份与恢复

 

 

一、MongoDB状态查看工具

#客户端连接⼯具

mongo

#启动命令

mongod

#分⽚路由命令

mongos

#查看mongo运⾏状态

mongostat

mongostat --port 28018 -O vsize,res --humanReadable=false --noheaders -n 1

-O #转换为统一格式

--humanReadable=false #将G转换为K

--noheaders #不输出⾸⾏标题

-n 1 #只输出⼀次

#查看mongo运⾏状态

mongotop

mongostat 与 mongotop 可以快速定位哪个库最繁忙

#备份

mongodump

#恢复

mongorestore

#备份

mongoexport

#恢复

mongoimport

#将bson格式导出json格式

bsondump

定时备份,全量备份 备份完后是bson或gzip格式,不可读

分析数据,迁移数据 本分完后是json或csv格式,可读

二、备份与恢复

(一)、mongodump/mongorestore 备份与恢复数据

介绍

mongodump能够在Mongodb运行时进行备份,它的工作原理是对运行的Mongodb做查询,然后将所有查到的文档写入磁盘。

但是存在的问题时使用mongodump产生的备份不一定是数据库的实时快照,如果我们在备份时对数据库进行了写入操作,

则备份出来的文件可能不完全和Mongodb实时数据相等。另外在备份时可能会对其它客户端性能产生不利的影响。

备份

全备单节点

 mongodump  --port 27017  -u myUserAdmin -p 123456 --authenticationDatabase admin -o back 

-o #指定备份后目录名称

全备集群

mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -o mongo_backup

只备份某个数据库

mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d oldboy -o mongo_backup

-d #指定备份库的名称

只备份某个库下的某个集合

mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d oldboy  -c user_info -o mongo_backup

-c #指定集合的名称

压缩格式

mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -o mongo_backup --gzip

--gzip #压缩格式

恢复

恢复bson格式的数据

mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" mongo_backup

恢复gzip格式的数据

mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" mongo_backup --gzip

遇到重复的删除再导⼊

mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019"  mongo_backup --gzip --drop

--drop #遇到重复值删除再导入

模拟执⾏导入

mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" mongo_backup --gzip --drop --dryRun

--dryRun #模拟执行

恢复到指定集合(恢复到指定集合那么数据格式必须是bson格式)

mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" --dir=./mongo_backup/oldboy/cook.bson -d oldboy -c cook --drop

bsog格式转换成json格式

bsondump  cook.bson --outFile=cook.json 

将cook.bson到处成为cook.json

(二)、mongoexport/mongoimport备份与恢复数据

备份

导出指定集合为json格式

mongoexport --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d test -c user_info -o mongo_backup/test.user_info.json

导出成csv格式

mongoexport --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d test -c user_info --type=csv --fields=name,age,host -o mongo_backup/test.user_info.csv

--fields #指定字段

恢复

从json格式恢复数据

mongoimport --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d test -c user_info mongo_backup/test.user_info.json --drop

从csv格式恢复数据

mongoimport --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" --type=csv --headerline -d test -c user_info mongo_backup/test.user_info.csv --drop

--headerline #以第一行数据作为列的依据

三、将mysql中的数据导入mongo

1、mysql开启安全路径

vim /etc/my.cnf

#添加以下配置
secure-file-priv=/tmp

重启数据库生效

/etc/init.d/mysqld restart

2、mysql⾃定义分隔符导出成csv格式

select * from test.t100w limit 10  into outfile '/tmp/100w.csv'   fields terminated by ',';

PS:mysql导出csv

fields terminated by ','    ------字段间以,号分隔

optionally enclosed by '"'   ------字段用"号括起

escaped by '"'    ------字段中使用的转义符为"

lines terminated by '\r\n';  ------行以\r\n结束

PS:mysql导入csv

load data infile '/tmp/2.csv'   
into table t1   
fields terminated by ','  ;

3、在mongodb中导入备份

mongoimport -uroot -proot123 --port 27017 --authenticationDatabase admin -d test  -c t100w --type=csv -f id,num,k1,k2,dt --file  /tmp/100w.csv

四、利用oplog恢复数据

环境准备

前提

1.只有副本集才会有oplog

2.oplog保存在local⾥

3.mongodump的时候,默认不备份local

.模拟场景

准备数据

use backup
db.backup.insertOne({"id":1})
db.backup.insertOne({"id":2})
db.backup.insertOne({"id":3})

全备数据库

mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -o mongo_backup

模拟误删除

use backup
db.dropDatabase()

恢复步骤

1、备份oplog

mongodump --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" -d local -c Loopia parking -o mongo_backup

2、定位误删除操作的时间点

use local
db.oplog.rs.find({"ns" : "backup.$cmd"}).pretty()

3、找到误删除操作的时间点

"ts" : Timestamp(1587375719, 1)

4、.截断oplog的drop时间点

cd mongo_backup
cp local/oplog.rs.bson oplog.bson
rm -rf local

5、恢复数据

mongorestore --host="dba/10.0.0.51:28017,10.0.0.51:28018,10.0.0.51:28019" --oplogReplay --oplogLimit=1587375719 mongo_backup --drop

--oplogReplay #oplog回放

--oplogLimit=1587375719 #回放到指定时间点备份

 

 

https://www.cnblogs.com/mingerlcm/p/10701752.html

https://www.cnblogs.com/operationhome/p/10724374.html

posted @ 2021-08-03 14:52  农夫运维  阅读(218)  评论(0)    收藏  举报