docker 不进入容器备份/还原mongodb

安装docker时,没有将存储目录(默认:/var/lib/docker)放在大磁盘中,

设置了mongodb的数据库文件路径到/data/db

在启动容器的时候做了地址映射,

比如:-v /data/mongodb:/data/db。/data/目录现在有500G,可以直接进入容器的/data/db目录进行备份,不会占用/var/lib/docker的空间。

 

如果没有做地址映射,不能进入容器中备份。

mongodb的数据目前是192G,/var/lib/docker

目前/var/lib/docker(/目录)只有96G

 

 

 

  

需要在不进入容器的情况下备份数据库到当前目录

集群环境下的备份,建议不要压缩(-gzip),否则还原识别不出来

#docker exec mongo sh -c 'exec mongodump --username 用户名-p 密码 -d 数据库名--archive' > 数据库名.archive

#docker exec mongo sh -c 'exec mongodump --username user1 -p 123456 -d iot --archive' > iot.archive

 

 

ps

不进入容器,导入数据

#docker exec -i mongodb sh -c 'exec mongorestore --archive --username 用户名 -p 密码 --authenticationDatabase 数据库名 --nsInclude 数据库名.* ' < 数据库名.archive

#user1/123456是iot数据库的用户/密码

#docker exec -i mongo6 sh -c 'exec mongorestore --archive --username user1 -p 123456 --authenticationDatabase iot --nsInclude iot.* ' < iot.archive

或者

#docker exec -i mongodb sh -c 'exec mongorestore --archive --username admin数据库的管理员名 -p 密码  --nsInclude 数据库名.* ' < 数据库名.archive

#a1/123456是admin数据库的用户/密码

#docker exec -i mongo6 sh -c 'exec mongorestore --archive --username a1 -p 123456  --nsInclude iot.* ' < iot.archive

注意:

还原的数据库名称需要备份时候的数据库名称一致。备份的数据库叫什么名称,还原的数据库也需要保持一致。

还原时可以不创建数据库,直接还原会同时创建数据库。mysql还原必须先创建数据库名才能还原成功。

集群的数据库还原,建议还原的文件不能压缩。

还原的数据是追加,而不是覆盖???还原的数据库中有数据,执行还原数据库命令后,原本有的数据还在,还原文件的数据也在,应该是追加。

追加也是追加不一样的数据,同样的数据不会重复还原(追加)

 

navicat查看到还原的数据

 

 

posted @ 2022-06-16 16:58  leihongnu  阅读(361)  评论(0)    收藏  举报