如何将已有的MongoDB数据迁移到容器内

236 阅读2分钟

背景需求

当前后端服务已经在服务器A上已经运行一段时间,产生了一定量的数据,现在需要切换为docker容器部署,且需要部署到服务器B,就需要把数据迁移到docker的数据库服务里面。

下载安装MongoDB备份恢复工具

在当前服务器A(Linux服务器)上安装数据库备份还原工具

# 先下载工具
https://www.mongodb.com/docs/database-tools/installation/installation-linux/

# 解压
tar -zxvf mongodb-database-tools-*-100.6.0.tgz

# 建立全局链接,方便全局使用命令,进入mongodb-database-tools-rhel80-x86_64-100.6.1的bin目录,执行以下命令
cp * /usr/local/bin/

备份数据

这里先把数据备份到服务器A的某个目录下面,比如/root/xxx-server/mongodb/dump

mongodump -d 数据库名称 -u 数据库用户 -p 数据库密码 -o /root/xxx-server/mongodb/dump

然后拷贝备份数据到服务器B的目录/home/xxx-server/mongodb/dump

sshpass -p B服务器密码 scp -o StrictHostKeyChecking=no -r /root/xxx-server/mongodb/dump/* root@B服务器IP:/home/xxx-server/mongodb/dump

注意

  1. 目录/home/xxx-server/mongodb/dump服务器B数据库容器的挂载卷

数据库的docker配置

服务B/home/xxx-server/目录下运行docker-compose up。这样容器启动之后,容器直接能访问到已经备份好的数据,因为我们上面已经把数据库拷贝到/home/xxx-server/mongodb/dump

xxx-mongodb:
    container_name: xxx-mongodb
    image: mongo:4.4.6
    restart: always
    ports:
      - 27018:27017 # 绑定容器的27017端口到主机的27018
    command: mongod --bind_ip_all
    volumes:
     - ./mongodb/data:/data/db
     - ./mongodb/logs:/data/logs
     - ./mongodb/dump:/data/dump # 挂载数据备份卷,从主机恢复数据到容器

恢复数据到容器内

启动容器之后,进入到数据库容器的bash,然后执行以下命令。/data/dump/是挂载卷,跟服务器B/home/xxx-server/mongodb/dump对应,前面步骤已经拷贝数据到此目录

mongorestore -d comet /data/dump/

修改服务器的时区

容器启动之后,发现服务器时间不对,需要修改服务器的时区

# 首先需要登录容器,然后执行以下命令
rm -rf /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Shanghai /etc/localtime