---
url: /v6.2/docker-backup-restore.md
---
## 备份数据

备份与恢复数据需要使用 [数据备份与恢复](backup-restore.md) 中的介绍的脚本，区别是以下操作均在容器内执行。

metadb备份是在 **hengshi-metadb** 的容器中执行

engine备份与恢复在 **hengshi-engine** 的容器中执行

minio备份与恢复在 **hengshi-minio** 的容器中执行

> \[!CAUTION] 请注意
> 在 docker 环境中，只使用本地备份方式，且备份到.env 中配置的 HSHOME 下的 backup 目录下，默认路径为 docker-compose-x.x/hsdata/backup。
> 数据恢复后请确认数据的正确性才能删除旧数据!

### 备份 metadb

```shell
# 进入metadb容器内建立备份目录
docker exec -it hengshi-metadb mkdir -p /opt/hsdata/backup 
# 开始备份
docker exec -it hengshi-metadb /opt/hengshi/bin/dbbackup.sh -m metadb -l /opt/hsdata/backup -t sql.gz
```

### 恢复 metadb

* 停止所有服务

```shell
docker-compose down
```

* 重命名旧数据目录

```shell
sudo mv ${HSHOME}/hsdata/pg_data ${HSHOME}/hsdata/pg_data.old
```

> \[!CAUTION] 请注意
> ${HSHOME} 是示例变量不能直接复制粘贴！ 请替换成你的实际部署目录。
>
> 例如:
>
> hengshi部署在/data/docker-compose-6.0，
> 实际路径则为sudo mv /data/docker-compose-6.0/hsdata/pg_data /data/docker-compose-6.0/hsdata/pg_data.old。

* 重新初始化新的metadb数据进行备份导入

```shell
docker-compose run --rm metadb init metadb
docker-compose up -d metadb
docker exec -it hengshi-metadb /opt/hengshi/bin/dbrestore.sh -m metadb -l /opt/hsdata/backup -t metadb_backup.xx-xx-xx_xx-xx-xx
docker-compose down
```

* 当 metadb 恢复成功后重新启动系统。

```shell
docker-compose up -d
```

* 业务检查正常后，删除旧数据

```shell
docker exec -it hengshi-metadb bash -c "rm /opt/hsdata/pg_data.old -rf"
```

### 备份恢复 engine 数据

```shell
docker exec -it hengshi-engine mkdir -p /opt/hsdata/backup
docker exec -it hengshi-engine /opt/hengshi/bin/dbbackup.sh -m engine -l /opt/hsdata/backup
```

### 恢复 engine

停止所有服务（也可只停止hengshi服务）

```shell
docker-compose down
```

重命名旧数据目录

```shell
sudo mv ${HSHOME}/hsdata/engine-cluster ${HSHOME}/hsdata/engine-cluster.old
```

> \[!CAUTION] 请注意
> ${HSHOME} 是示例变量不能直接复制粘贴！ 请替换成你的实际部署目录。
>
> 例如:
>
> hengshi部署在/data/docker-compose-5.1，
> 实际路径则为sudo mv /data/docker-compose-5.1/hsdata/engine-cluster /data/docker-compose-5.1/hsdata/engine-cluster.old

3.重新初始化新的engine数据进行备份导入

```shell
docker-compose run --rm engine init engine
docker-compose up -d engine
docker exec -it hengshi-engine /opt/hengshi/bin/dbrestore.sh -m engine -l /opt/hsdata/backup -t engine_backup.xx-xx-xx_xx:xx:xx.tar.gz
docker-compose down
```

* 当 engine 恢复成功后重新启动系统。

```shell
docker-compose up -d
```

* 业务检查正常后，删除旧数据

```shell
docker exec -it hengshi-engine bash -c "rm /opt/hsdata/engine-cluster.old -rf"
```

### 备份 minio

```shell
docker exec -it hengshi-minio mkdir -p /opt/hsdata/backup
docker exec -it hengshi-minio /opt/hengshi/bin/dbbackup.sh -m minio -l /opt/hsdata/backup
```

### 恢复 minio

停止所有服务（也可只停止hengshi服务）

```shell
cd docker-compose-x.x
docker-compose down
```

重命名旧数据目录

```shell
sudo mv ${HSHOME}/hsdata/minio-data ${HSHOME}/hsdata/minio-data.old
```

> \[!CAUTION] 请注意
> ${HSHOME} 是示例变量不能直接复制粘贴！ 请替换成你的实际部署目录。
>
> 例如:
>
> hengshi部署在/data/docker-compose-5.1，
> 实际路径则为sudo mv /data/docker-compose-5.1/hsdata/minio-data /data/docker-compose-5.1/hsdata/minio-data.old。

minio无需初始化，启动后可以直接进行备份导入

```shell
docker-compose up -d minio
docker exec -it hengshi-minio /opt/hengshi/bin/dbrestore.sh -m minio -l /opt/hsdata/backup -t minio_backup.xx-xx-xx_xx:xx:xx.tar.gz
docker-compose down
```

* 当 minio 恢复成功后重新启动系统。

```shell
docker-compose up -d
```

* 业务检查正常后，删除旧数据

```shell
docker exec -it hengshi-minio bash -c "rm /opt/hsdata/minio-data.old -rf"
```
