MongoDB备份恢复

1.备份恢复工具介绍

1)mongoexport/mongoimport

(2)mongodump/mongorestore

2.备份工具区别在哪里?

应用场景总结:
异构平台迁移 :mysql------mongodb
同平台跨大版本:MongoDB2------MongoDB3
mongoexport/mongoimport:json csv

日常备份恢复时使用
mongodump/mongorestore

3.导出工具【mongoexport】

mongoexport具体用法如下所示:

$  mongoexport --help
参数说明:
-h:指明数据库宿主机的IP
-u:指明数据库的用户名
-p:指明数据库的密码
-d:指明数据库的名字
-c:指明collection的名字,就是表名
-f:指明要导出哪些列
-o:指明要导出的文件名
-q:指明要导出的数据的过滤条件
--authenticationDatabase admin
举例:
###导出一个库下的某一个集合 mongoexport
--port 27017 -d xxx -c xxx -o /backup/log.json

###导出csv格式
mongoexport --port 27017 -d xxx -c xxx --type=csv -f field1,field2,field3,field4 -o /backup/log.json

4.导入数据【mongoimport】

###普通数据导入
mongoimport --port 27017 -d dba -c dba /backup/log.json
-d:恢复到哪个库就写哪个库
###csv文件导入
mongoimport --port 27017 -d dba -c dba -type csv -f xxx,xxx,xxx,xxx --file /backup/log.csv
--headerline:csv类型的文件第一列是列名,不需要导入到库里,需要加上这个参数

5.异构平台迁移案例

###从mysql数据库中以CSV类型将其导出
select
* from mysql.user into outfile '/tmp/city1.csv' fields terminated by ',';
###让后以CSV类型导入到MongoDB mongoimport
--port 27017 -d mysql -c user --type=csv -f ip,user,passwd --file /tmp/city1.csv

6.备份【mongodump】

###全备
mongodump -port 27017 -o /backup/

###备份xxx库
mongodump -port 27017 -d xxx -o /backup/

###压缩备份
mongodump -port 27017 -o /backup/ --gzip

7.恢复数据【mongorestore】

mongorestore --port 27017 -d world1 /data/backup/world

###恢复之前先删掉
mongorestore --port 27017 -d world1 /data/backup/world --drop

 8.日志中数据恢复

1.模拟故障环境
[mongo@db01 backup]$ mongo db01:28017
dba58:PRIMARY> use wo
dba58:PRIMARY> for(var i = 1 ;i < 20; i++) {db.ci.insert({a:i});}
2.全备
[mongo@db01 backup]$ rm -rf /backup/*
[mongo@db01 backup]$ mongodump --port 28017 --oplog -o /backup/
3.再次模拟数据
[mongo@db01 backup]$ mongo db01:28017
dba58:PRIMARY> use wo
dba58:PRIMARY> db.ci1.insert({"aaaa":"bbbb"})
dba58:PRIMARY> db.ci2.insert({"aaaa":"bbbb"})
dba58:PRIMARY> show tables;
ci
ci1
ci2
4.删除wo下面的ci表
dba58:PRIMARY> use wo
dba58:PRIMARY> db.ci.drop()
dba58:PRIMARY> show tables
ci1
ci2
5.备份现有的oplog.rs表
[mongo@db01 backup]$ mongodump --port 28017 -d local -c oplog.rs -o /backup/
6.截取oplog并恢复到drop之前的位置
[mongo@db01 backup]$ mongo db01:28017
dba58:PRIMARY> use local
dba58:PRIMARY> db.oplog.rs.find({ns:"wo.$cmd"}).pretty();

{
    "ts" : Timestamp(1609427636, 1),
    "t" : NumberLong(2),
    "h" : NumberLong("6321033622495857543"),
    "v" : 2,
    "op" : "c",
    "ns" : "wo.$cmd",
    "ui" : UUID("5a5ba2a5-5646-4140-bad8-225a3f468e51"),
    "wall" : ISODate("2020-12-31T15:13:56.600Z"),
    "o" : {
        "drop" : "ci"
    }
}
7.local下面的oplog是最新的,copy出来,删除local目录进行恢复数据
[mongo@db01 local]$ cp /backup/local/oplog.rs.bson /backup/oplog.bson 
[mongo@db01 local]$  mongorestore --port 28017 --oplogReplay --oplogLimit "1609427636:1" --drop /backup/

[mongo@db01 backup]$ mongo db01:28017
[mongo@db01 backup]$ use wo
[mongo@db01 backup]$ show tables
ci
ci1
ci2

 

posted @ 2020-12-29 18:31  鄧萌  阅读(102)  评论(0)    收藏  举报