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

浙公网安备 33010602011771号