Docker中安装MongoDB并数据持久化及备份还原数据

使用Docker的好处就是尽量减少了环境部署,开发交付环境一致,可靠性强,容易维护。使用Docker搭建MongoDB的最重要的一点是容器无状态化,即不在容器中保存数据,重新生成数据库容器,必须保证数据库数据不丢失,所有数据保存在数据卷中,方便随时备份和恢复。

创建数据Volume

docker volume create mongodbdata

创建MongoDB容器,并将数据映射到数据Volume中

docker run --name my-mongo --restart=always -v mongodbdata:/data/db -d mongo

此时就可以正常使用了,其他容器要使用MongoDB只需要 --link my-mongo 就可以了

备份数据库,这里有两种方法,分别是:通过创建挂载Volume的容器去备份数据到物理盘、直接从Volume的物理挂载点备份文件

1. 通过创建挂载Volume的容器去备份数据到物理盘

通过busybox容器的tar命令将数据Volume中的数据打包备份到本地

cd到需要存放备份文件的目录
docker run -v $(pwd):/backup -v mongodbdata:/mongodbdata busybox tar cvf /backup/$(date +%Y%m%d%H%M%S).tar /mongodbdata

还原数据库,通过busybox容器的tar命令将本地备份文件覆盖到数据Volume中

cd到存放备份文件的目录
docker run -v $(pwd):/backup -v mongodbdata:/mongodbdata busybox tar xvf /backup/backup.tar -C ./

2. 直接从Volume的物理挂载点备份文件

所有的Volume从原理上都是直接挂载物理盘的某个挂载点,所以可以找到挂载点并直接打包复制文件出来做备份

查看Volume的物理挂载点

docker volume inspect mongodbdata
[
    {
        "CreatedAt": "2019-07-05T09:57:27+08:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/mongodbdata/_data",
        "Name": "mongodbdata",
        "Options": {},
        "Scope": "local"
    }
]

可见该Volume的物理挂载点是/var/lib/docker/volumes/mongodbdata/_data

备份数据

tar cvf /root/backup/mongodb/$(date +%Y%m%d%H%M%S).tar /var/lib/docker/volumes/mongodbdata/_data

恢复备份

tar xvf /root/backup/mongodb/backup.tar -C /var/lib/docker/volumes/mongodbdata/_data
Share

You may also like...

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注