MongoDB整库备份之mongodump
如果是docker部署的mongo先docker exec -it mongo bash登录mongo容器,然后在bin文件夹下,运行指令
这个demo是在mongodump
中导出单表,但是其实单表导出还是下面的mongoexport
更加适合,mongodump
还是更适合整库备份
mongodump之单表
mongodump -h 127.0.0.1:27017 -d xwms -u XXX -p XXX -c "interface_log_body" -q '{"expireAt":{$gte:ISODate("2020-02-16T00:00:00.000Z")}}' -o /mongodumpData/2020_1_17_interface_body.dump
- -d代表哪个mongo数据库
- -c代表哪个collection集合
- -q 后面的代表删选某一段时间的数据,也可以些其他的mongo筛选语句
- -o 代表导出到容器的哪个路径下
导出完成后还需要把文件从docker容器中复制到宿主机的本地路径下
docker cp a765d1f37a57:/mongodumpData/mongodumpData/ /home/
a765d1f37a57
代表容器id
/mongodumpData/mongodumpData/
容器中备份数据的存放路径 这个路径是针对于容器的不是宿主机
/home/
代表宿主机的本地路径
mongodump之整库(整库备份推荐)
语法:
mongodump -h dbhost -d dbname -o dbdirectory
参数说明:
- -h: MongDB所在服务器地址,例如:127.0.0.1,当然也可以指定端口号:127.0.0.1:27017
- -d: 需要备份的数据库实例,例如:test
- -o: 备份的数据存放位置,例如:/home/mongodump/,当然该目录需要提前建立,这个目录里面存放该数据库实例的备份数据,如果想增量恢复的话还是只能单表恢复,可以参考下面的单表恢复
demo
sudo rm -rf /home/momgodump/
sudo mkdir -p /home/momgodump
sudo mongodump -h 192.168.17.129:27017 -d itcast -o /home/mongodump/
MongoDB整库恢复之mongorestore
语法:
mongorestore -h dbhost -d dbname --dir dbdirectory
参数解释:
- -h: MongoDB所在服务器地址
- -d: 需要恢复的数据库实例,例如:test,当然这个名称也可以和备份时候的不一样,比如test2
- –dir: 备份数据所在位置,例如:/home/mongodump/itcast/
- –drop: 恢复的时候,先删除当前数据,然后恢复备份的数据。就是说,恢复后,备份后添加修改的数据都会被删除,也就是会冲掉原先备份之后新增的数据.
demo
mongorestore -h 192.168.17.129:27017 -d itcast_restore --dir /home/mongodump/itcast/
MongoDB单表数据导入与导出之mongoexport
实际在使用的使用遇到了mongo的过期时间expireAt的坑,在实际筛选的时候要往前推一天。比如你要找interFace里的id的创建时间是2020.1.15号的对应的日志body,你需要找expireAt >= 2020.2.14(mongo默认的过期时间是1个月)
demo如下
mongoexport -d xwms -c interface_log_body -q '{expireAt : {$gte: ISODate("2020-02-14T00:00:00.000Z")}}' -o /mongodumpData/2020_interface_log_body.json -u root -p tingtong.123
导出之后还要把数据从docker容器中copy到宿主机本地
docker cp a765d1f37a57:/mongodumpData/2020_interface_log_body.json /home/
针对于单张表备份还是mongoexport
方便
语法:
mongoexport -d dbname -c collectionname -o file --type json/csv -f field
参数说明:
- -d :数据库名
- -c :collection名
- -o :输出的文件名
- –type : 输出的格式,默认为json
- -f :输出的字段,如果-type为csv,则需要加上-f “字段名”
示例:
sudo mongoexport -d mongotest -c users -o /home/python/Desktop/mongoDB/users.json --type json -f "_id,user_id,user_name,age,status"
如果是json格式的,可以不用指明具体字段,默认全部导出,是在docker里运行的话,先登录docker mongo
容器,然后直接运行mongoexport
对应命令导出内容到容器中,然后docker cp
复制出来到宿主机即可
demo
sudo mongoexport -d mongotest -c users -o /home/python/Desktop/mongoDB/users.json --type json
如果数据库有加密码
sudo mongoexport -u userName -p passwd -d mongotest -c users -o /home/python/Desktop/mongoDB/users.json --type json
单表数据导入:mongoimport
语法:
mongoimport -d dbname -c collectionname --file filename --headerline --type json/csv -f field
参数说明:
- -d :数据库名
- -c :collection名
- –type :导入的格式默认json
- -f :导入的字段名
- –headerline :如果导入的格式是csv,则可以使用第一行的标题作为导入的字段
- –file :要导入的文件
示例:
sudo mongoimport -d mongotest -c users --file /home/mongodump/articles.json --type json
如果是docker
启动的mongo
容器
在导入的时候表不存在的话会自动创建,并且是增量恢复,不会冲掉原先的记录
demo