Skip to content

从 centos docker 上备份 mongodb 数据到本地

初衷

项目本意是为了给 centos 上的数据备份到 mac 上的 docker 上。

进入 centos

sh
ssh root@139.9.212.113

进入 docker 中的 mongodb

sh
docker exec -it mongodb_container_id /bin/bash

导出 mongodb 数据到 mongodb 容器内

sh
mongodump -h 127.0.0.1:27017 --archive=/home/db.gz --gzip -d=db
  • -h 表示 host
  • -d 表示 database
  • --gzip 表示压缩

更多备份内容:https://docs.mongodb.com/manual/reference/program/mongodump/

将上面导出到 mongodb 中的数据拷贝到 centos

sh
docker cp mongodb_container_id:/home/db.gz /home
  • mongodb_container_id:mongodb 容器 id
  • /home/db.gz:mongodb 容器内备份的路径
  • /home:导出到 centos 的路径

本地电脑下载 centos 上备份的 mongodb 数据

在 mac 本地的 zsh 中执行 scp 命令

sh
scp root@139.x.xxx.xxx:/home/auto.gz ~/work
  • root@139.x.xxx.xxx:表示 centos 登录的账号和 ip
  • /home/auto.gz 表示上面导出到 centos 的 mongodb 的数据路径
  • ~/work 表示导出到本地 mac 的路径

拷贝上一步导出到本地的 mongodb 数据到 mac中 docker里 mongodb 中

sh
docker cp ~/work/db.gz mac_docker_mongodb_container_id:/home/
  • ~/work/db.gz:表示 mac 中的数据路径
  • mac_docker_mongodb_container_id:mac 上 docker mongodb 的 container id
  • /home/:表示 mac 上 docker 中 mongodb 容器中备份路径

导入到本地 mac 的 docker 的 mongodb 中

测试下

sh
mongorestore --gzip --archive=/home/db.gz dump/ --dryRun --verbose
  • --dryRun 表示演习一下
  • --verbose 显示执行详情
  • 注:去掉 --dryRun --verbose 才算真的恢复数据

上面如果测试成功的话,执行:

sh
mongorestore --gzip --archive=/home/db.gz dump/

当 mongod 开启权限认证的话,可以尝试

shell
mongorestore -u root -p=root39816561 --gzip --archive=/home/auto.gz dump/ --verbose