青成林语

协助他人,成就彼此 ^_^
中间件配置备份打包恢复

 

mkdir -p /home/hydev/mongodb/data
chown -R 999:999 /home/hydev/mongodb/data

 

docker run -d \
  --name mongodb \
  --hostname mongodb \
  -p 27017:27017 \
  --restart always \
  -v /home/hydev/mongodb/data:/data/db \
  -v /home/hydev/mongodb/logs:/var/log/mongodb \
  -v /home/hydev/mongodb/conf/mongod.conf:/home/mongodb/conf/mongod.conf \
  -e MONGO_INITDB_ROOT_USERNAME=admin \
  -e MONGO_INITDB_ROOT_PASSWORD=mongodb0509 \
  mongo:6.0 \
  --config /home/mongodb/conf/mongod.conf

 

既然我们已经优化了 Docker 运行命令,将数据精准持久化到了宿主机的 /home/hydev/mongodb/data 目录,那么现在的备份与恢复操作就会变得非常清晰和安全。

以下是基于优化后环境的完整备份与恢复步骤:

📦 第一步:在源服务器(华为云)执行备份

由于你的 MongoDB 容器内没有直接安装 mongodump 工具(或者为了环境隔离),我们采用 docker exec 的方式在容器内执行备份,并将备份文件直接输出到宿主机的持久化目录中。

  1. 在源服务器上执行备份命令

    # 1. 创建宿主机备份目录(如果不存在)
    mkdir -p /home/hydev/mongodb/backup
    
    # 2. 在容器内执行 mongodump,并将备份文件输出到挂载的宿主机目录
    docker exec mongodb mongodump \
      --uri="mongodb://admin:mongodb0509@localhost:27017" \
      --out=/home/mongodb/backup
    
    # 3. 退出后,备份文件实际已保存在宿主机的 /home/hydev/mongodb/backup 目录下
    

    注:这里去掉了 URI 末尾的 /admin,确保全量备份所有业务数据库。

  2. 打包备份文件
    为了方便传输,建议在源服务器上将备份目录打包:

    tar -czvf /home/hydev/mongodb/backup/mongodb_backup_$(date +%Y%m%d).tar.gz -C /home/hydev/mongodb/backup .
    

🚀 第二步:在目标服务器(本地虚拟机)执行恢复

  1. 传输并解压备份文件
    将打包好的 mongodb_backup_*.tar.gz 文件通过 scp 等方式传输到本地虚拟机,并解压:

    # 1. 创建本地备份目录
    mkdir -p /home/hydev/mongodb/backup
    
    # 2. 解压文件
    tar -xzvf mongodb_backup_20260625.tar.gz -C /home/hydev/mongodb/backup
    
  2. 使用优化后的命令启动新容器
    在本地虚拟机上,使用我们之前优化好的 Docker 命令启动 MongoDB 容器。此时容器内的 /data/db 对应的是本地虚拟机的 /home/hydev/mongodb/data(初始为空)。

  3. 执行数据恢复
    将宿主机的备份文件拷贝进容器,并执行 mongorestore

    # 1. 将宿主机的备份文件拷贝进新容器
    docker cp /home/hydev/mongodb/backup/. mongodb:/home/mongodb/backup
    
    # 2. 在容器内执行恢复
    docker exec mongodb mongorestore \
      --uri="mongodb://admin:mongodb0509@localhost:27017" \
      --drop \
      /home/mongodb/backup
    

    注:--drop 参数会在恢复前删除目标数据库中已存在的集合,确保恢复的数据与备份完全一致。如果是全新空容器,不加 --drop 也可以。


💡 进阶优化建议:直接使用宿主机工具

如果你不想每次都通过 docker cp 将备份文件拷进拷出,也可以在本地虚拟机宿主机上直接安装 mongodb-database-tools,然后直接使用宿主机的 mongorestore 命令连接容器的 27017 端口进行恢复:

# 直接在本地虚拟机宿主机上执行(无需 docker cp)
mongorestore \
  --uri="mongodb://admin:mongodb0509@localhost:27017" \
  --drop \
  /home/hydev/mongodb/backup

这种方式利用了 Docker 的 -p 27017:27017 端口映射,操作更加丝滑,备份和恢复的文件都直接存在于宿主机上,效率更高。

 

 

docker run --name=mongodb --hostname=fd8af0124adb --mac-address=02:42:ac:11:00:04 --volume /home/hydev/mongodb/conf/mongod.conf:/home/mongodb/conf/mongod.conf --volume /home/hydev/mongodb/logs:/home/mongodb/logs --volume /data/configdb --volume /data/db --volume /home/hydev/mongodb/data:/home/mongodb/data --env=MONGO_INITDB_ROOT_USERNAME=admin --env=MONGO_INITDB_ROOT_PASSWORD=mongodb0509 --network=bridge -p 27017:27017 --runtime=runc --detach=true mongo:6.0 --config /home/mongodb/conf/mongod.conf
docker run --name=rabbitmq --hostname=myRabbit --mac-address=02:42:ac:11:00:07 --volume /home/hydev/rabbitmq/data/data:/var/lib/rabbitmq --env=RABBITMQ_DEFAULT_VHOST=my_vhost --env=RABBITMQ_DEFAULT_USER=admin --env=RABBITMQ_DEFAULT_PASS=admin --network=bridge --expose=15671 -p 15672:15672 --expose=15691 --expose=15692 --expose=25672 --expose=4369 --expose=5671 -p 5672:5672 --runtime=runc --detach=true rabbitmq:3.13-management rabbitmq-server
docker run --name=nacos --hostname=02a0d71f274b --mac-address=02:42:ac:11:00:03 --volume /home/hydev/nacos/conf:/home/nacos/conf --volume /home/hydev/nacos/data:/home/nacos/data --env=NACOS_AUTH_IDENTITY_KEY=nacos --env=NACOS_AUTH_IDENTITY_VALUE=nacos --env=MYSQL_SERVICE_PASSWORD=123456 --env=MODE=standalone --env=JVM_XMS=128m --env=JVM_XMX=128m --env=JVM_XMN=128m --network=bridge --workdir=/home/nacos -p 8848:8848 -p 9848:9848 -p 9849:9849 --runtime=runc --detach=true nacos/nacos-server:v2.5.1
docker run --name=xxl-job-admin --hostname=12c4639a2d79 --mac-address=02:42:ac:11:00:05 --volume /home/hydev/xxljob/logs:/opt/apps/xxljob/logs --volume /home/hydev/xxljob/conf:/opt/apps/xxljob/conf --env=PARAMS=--spring.config.location=/opt/apps/xxljob/conf/application.properties --network=bridge -p 8844:8080 --restart=always --runtime=runc --detach=true xuxueli/xxl-job-admin:2.5.0

 

根据你提供的配置文件,迁移方案需要做一些关键调整。核心发现是:Nacos 和 XXL-JOB 的数据都在 MySQL 里,所以只要 MySQL 迁移成功,它们的数据就安全了。我们只需要迁移它们的配置文件,并更新数据库连接地址即可。

以下是更新后的详细迁移方案。

📋 迁移总览 (更新版)

中间件核心数据/配置迁移关键点
MongoDB 数据目录 /data/db 使用 mongodumpmongorestore 进行逻辑备份恢复。
RabbitMQ 数据目录 /var/lib/rabbitmq 停止容器后直接拷贝数据文件,注意修复权限。
Nacos 数据在 MySQL 中 只需迁移 conf 配置文件,并修改数据库连接地址。
XXL-JOB 数据在 MySQL 中 只需迁移 conf 配置文件,并修改数据库连接地址。

1. MongoDB 迁移方案

此方案不变,依然是逻辑备份与恢复。

步骤 1: 在华为云上备份

# 1. 进入容器
docker exec -it mongodb bash

# 2. 在容器内执行备份 (会提示输入密码 mongodb0509)
mongodump --uri="mongodb://admin:mongodb0509@localhost:27017/admin" --out=/home/mongodb/backup

# 3. 退出容器
exit

# 4. 将备份文件拷贝到宿主机
docker cp mongodb:/home/mongodb/backup /home/hydev/mongodb/backup

步骤 2: 在本地虚拟机恢复

  1. 准备目录:确保本地有 /home/hydev/mongodb/data 目录。
  2. 拷贝备份:将华为云上的 /home/hydev/mongodb/backup 目录拷贝到本地虚拟机的 /home/hydev/mongodb/ 下。
  3. 启动容器:使用你提供的 docker run 命令启动 MongoDB 容器。
  4. 恢复数据
# 1. 将备份文件拷贝进新容器
docker cp /home/hydev/mongodb/backup/. mongodb:/home/mongodb/backup

# 2. 进入容器并恢复
docker exec -it mongodb bash
mongorestore --uri="mongodb://admin:mongodb0509@localhost:27017/admin" /home/mongodb/backup

2. RabbitMQ 迁移方案

此方案不变,直接拷贝数据文件。

步骤 1: 在华为云上备份

# 1. 停止容器
docker stop rabbitmq

# 2. 打包数据目录
tar -czvf /home/hydev/rabbitmq_data_backup.tar.gz -C /home/hydev/rabbitmq/data/data .

# 3. 启动容器
docker start rabbitmq

步骤 2: 在本地虚拟机恢复

  1. 准备目录:确保本地有 /home/hydev/rabbitmq/data/data 目录。
  2. 拷贝备份:将 rabbitmq_data_backup.tar.gz 拷贝到本地。
  3. 恢复数据
# 1. 清空本地数据目录(如果有的话)
rm -rf /home/hydev/rabbitmq/data/data/*

# 2. 解压备份文件
tar -xzvf /home/hydev/rabbitmq_data_backup.tar.gz -C /home/hydev/rabbitmq/data/data

# 3. 关键:修复文件权限
chown -R 999:999 /home/hydev/rabbitmq/data/data
  1. 启动容器:使用你提供的 docker run 命令启动。

3. Nacos 迁移方案 (重点更新)

Nacos 的数据在 MySQL 中,我们只需迁移配置文件,并确保它能连接到本地的 MySQL。

步骤 1: 在华为云上备份

# 打包 Nacos 的 conf 目录
tar -czvf /home/hydev/nacos_conf_backup.tar.gz -C /home/hydev/nacos conf

步骤 2: 在本地虚拟机恢复

  1. 准备目录:确保本地有 /home/hydev/nacos/conf 目录。
  2. 拷贝备份:将 nacos_conf_backup.tar.gz 拷贝到本地。
  3. 恢复并修改配置
# 1. 解压配置文件
tar -xzvf /home/hydev/nacos_conf_backup.tar.gz -C /home/hydev/nacos

# 2. 修改 application.properties,指向本地 MySQL
# 关键修改项:db.url.0, db.user.0, db.password.0
sed -i 's|db.url.0=.*|db.url.0=jdbc:mysql://<你的本地虚拟机IP>:3306/nacos?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true|' /home/hydev/nacos/conf/application.properties
sed -i 's|db.user.0=.*|db.user.0=root|' /home/hydev/nacos/conf/application.properties
sed -i 's|db.password.0=.*|db.password.0=<你的本地MySQL密码>|' /home/hydev/nacos/conf/application.properties
  1. 启动容器:使用你提供的 docker run 命令启动。Nacos 会连接到本地已恢复的 MySQL。

4. XXL-JOB 迁移方案 (重点更新)

与 Nacos 类似,XXL-JOB 的数据也在 MySQL 中,我们只需迁移并修改配置文件。

步骤 1: 在华为云上备份

# 打包 conf 目录
tar -czvf /home/hydev/xxljob_conf_backup.tar.gz -C /home/hydev/xxljob conf

步骤 2: 在本地虚拟机恢复

  1. 准备目录:确保本地有 /home/hydev/xxljob/conf 目录。
  2. 拷贝备份:将 xxljob_conf_backup.tar.gz 拷贝到本地。
  3. 恢复并修改配置
# 1. 解压配置文件
tar -xzvf /home/hydev/xxljob_conf_backup.tar.gz -C /home/hydev/xxljob

# 2. 修改 application.properties,指向本地 MySQL
# 关键修改项:spring.datasource.url, spring.datasource.username, spring.datasource.password
sed -i 's|spring.datasource.url=.*|spring.datasource.url=jdbc:mysql://<你的本地虚拟机IP>:3306/xxl-job?useUnicode=true&characterEncoding=UTF-8&autoReconnect=true&serverTimezone=Asia/Shanghai|' /home/hydev/xxljob/conf/application.properties
sed -i 's|spring.datasource.username=.*|spring.datasource.username=app|' /home/hydev/xxljob/conf/application.properties
sed -i 's|spring.datasource.password=.*|spring.datasource.password=hyapp250509|' /home/hydev/xxljob/conf/application.properties
  1. 启动容器:使用你提供的 docker run 命令启动。XXL-JOB 会连接到本地已恢复的 MySQL。

✅ 最终验证方案

所有中间件启动后,通过你的 biz 应用进行端到端验证。

  1. 连接性验证

    • MySQL: biz 应用能否正常启动,并执行增删改查操作。
    • Redis: biz 应用能否正常读写缓存。
    • Nacos: biz 应用能否成功注册到 Nacos,并能从 Nacos 拉取到配置。
    • MongoDB: biz 应用能否连接并操作 MongoDB 数据库。
    • RabbitMQ: biz 应用能否成功连接,并能发送/消费消息。
    • XXL-JOB: biz 应用作为执行器,能否在 XXL-JOB 管理后台被正确发现。
  2. 功能验证

    • biz 应用中触发一个完整的业务流程,该流程应涉及上述多个中间件。
  3. 日志检查

    • 使用 docker logs -f <container_name> 实时查看各个中间件容器的日志,确保没有报错信息。

posted on 2026-06-25 12:23  青成林语  阅读(9)  评论(0)    收藏  举报