---
url: /v6.2/backup-restore.md
---
# 数据备份与恢复

HENGSHI SENSE 运行过程中，需要对数据进行备份，当数据出现问题时，可以使用备份数据进行恢复，避免数据丢失和损坏的情况发生，减少损失。

本文介绍如何对衡石内部业务数据库 metadb、衡石内部加速引擎、衡石内部对象存储 Minio 服务的数据进行备份和恢复操作。

## 数据备份命令

用户可以通过'bin/dbbackup.sh'对 metadb、engine、minio 的数据进行备份，备份文件可以存储在本地，也可以存储到远程机器上。

```sh
bin/dbbackup.sh -m [metadb|engine|minio]
                -l local backup root, absolute path, default ${PWD}/backup
                -k keep history backup number, default 3
                -h remote ip
                -r remote path root, default is ${backup_root}
                -s exclude db name for backup, eg. -s db1 -s db2
                -t [sql.gz|tar.gz], default tar.gz; final target type: individual sql file gz or total folder tar gz
                -n pigz threads number
```

参数说明：

* -m 参数必选，指数据备份类型，枚举类型，选项为 metadb 、engine 、minio。
* -l 参数可选，指本地备份时备份文件的绝对路径。
* -k 参数可选，保留备份文件的数量， 默认为3，指保留最近3次备份的数据。
* -h 参数可选，指远程备份时的 ip 地址。
* -r 参数可选，指远程备份时备份文件的绝对路径，默认与 -l 参数指定的本地路径相同。
* -s 参数可选，跳过指定名字数据库的备份，可多次传递排除多个数据库的备份
* -t 参数可选，'sql.gz' (建议优先选用) 会在备份过程中同步执行压缩，加快备份速度降低对磁盘工作空间的需求; 默认 'tar.gz' 为旧版方式备份后再压缩，过程耗时长磁盘需要空间大
* -n 参数可选，当监测到存在 pigz 时，会使用 pigz 进行压缩，本参数为传给 pigz 的工作线程数，默认为 4，当机器 cpu 配置较高可传入更大的值

## 数据恢复命令

用户可以通过'bin/dbrestore.sh'对 metadb、engine、minio 进行数据恢复，可以用本地备份数据进行数据恢复，也可以用远程备份数据进行数据恢复。

```sh
bin/dbrestore.sh -m [metadb|engine|minio]
                -l local backup root, absolute path, default ${PWD}/backup
                -t backup tar only file name
                -h remote ip
                -r remote path root, default is ${backup_root}
                -n pigz threads number
```

参数说明：

* -m 参数必选，指数据备份类型，枚举类型，选项为 metadb 、engine 、minio。
* -l 参数可选，使用本地备份数据恢复时的绝对路径。
* -h 参数可选，使用远程备份数据恢复时的 ip 地址。
* -r 参数可选，使用远程备份数据恢复时的绝对路径， 默认与-l 参数指定的本地绝对路径相同。
* -t 参数必选，指待恢复的数据包的 tar.gz 文件名，或新版备份生成的目录名
* -n 参数可选，当监测到存在 pigz 时，会使用 pigz 进行解压，本参数为传给 pigz 的工作线程数，默认为 4，当机器 cpu 配置较高可传入更大的值

## 数据库 metadb 的备份和恢复

数据库 metadb 是衡石业务数据库，建议用户每日定时备份，防止数据丢失和损坏。

### 备份数据

备份数据根据备份文件存储位置分为本地备份和远程备份。

#### 本地备份

首先设置变量 PATH_TO_BACKUP_FOLDER 存放备份数据的绝对路径，然后执行备份命令。此时在$PATH_TO_BACKUP_FOLDER 下生成 metadb_backup.xx-xx-xx_xx-xx-xx 的备份目录，默认会保留最近3次备份。参考示例如下。

```shell
PATH_TO_BACKUP_FOLDER=/xxx
bin/dbbackup.sh -m metadb -l $PATH_TO_BACKUP_FOLDER -t sql.gz
```

#### 远程备份

远程备份需要设置 REMOTE_IP 和 PATH_TO_BACKUP_FOLDER 两个变量，其中 REMOTE_IP 用于存放远程设备的 ip 地址，PATH_TO_BACKUP_FOLDER 存放备份数据的绝对路径。然后执行远程备份命令后，在远程设备 REMOTE_IP 的 PATH_TO_BACKUP_FOLDER 下生成备份文件。参考示例如下。

```shell
PATH_TO_BACKUP_FOLDER=/xxx
bin/dbbackup.sh -m metadb -l $PATH_TO_BACKUP_FOLDER -t sql.gz -h $REMOTE_IP -r $PATH_TO_BACKUP_FOLDER
```

> \[!TIP] 提示
> 远程备份数据时需要对远程设备有 ssh 访问权限，备份时需要使用 scp 进行复制。

### 恢复数据

根据备份文件存放的地址，分为本地数据恢复和远程数据恢复。

#### 本地数据恢复

使用本地备份的数据进行数据恢复时，请按照如下步骤进行操作。

1. 设置存放备份数据的绝对路径的变量 PATH_TO_BACKUP_FOLDER。

```sh
PATH_TO_BACKUP_FOLDER=/xxx
```

2. 停止 HENGSHI 服务，并移除 HENGSHI 系统中旧的数据库。

```sh
bin/hengshi-sense-bin stop all
mv pg_data pg_data.old
```

3. 初始化并启动 metadb。

```sh
bin/hengshi-sense-bin init metadb
bin/hengshi-sense-bin start metadb
```

4. 使用本地存储的备份文件，进行 metadb 的数据恢复。
   `-t` 参数视备份脚本新旧版本不同，生成的为 tar.gz 文件或者目录，而传入对应的文件或目录名

```sh
bin/dbrestore.sh -m metadb -l $PATH_TO_BACKUP_FOLDER -t metadb_backup.xx-xx-xx_xx-xx-xx[.tar.gz]
```

5. 停止 metadb，启动 HENGSHI 服务，完成数据恢复操作。

```sh
bin/hengshi-sense-bin stop metadb
bin/hengshi-sense-bin start all
```

#### 远程数据恢复

当备份数据存在远程设备上时，请先确认是否对远程设备拥有 SSH 访问权限，如果没有请先获取 SSH 访问权限，然后按照下面指导进行数据恢复操作。

1. 设置远程设备的 ip 地址变量 REMOTE_IP 和存放备份数据的绝对路径的变量 PATH_TO_BACKUP_FOLDER。

```sh
PATH_TO_BACKUP_FOLDER=/xxx
REMOTE_IP=/xxx
```

2. 停止 HENGSHI 服务，并移除 HENGSHI 系统中旧的数据库。

```sh
bin/hengshi-sense-bin stop all
mv pg_data pg_data.old
```

3. 初始化并启动 metadb。

```sh
bin/hengshi-sense-bin init metadb
bin/hengshi-sense-bin start metadb
```

4. 使用远程设备上存储的备份文件，进行 metadb 的数据恢复。

```sh
bin/dbrestore.sh -m metadb -l $PATH_TO_BACKUP_FOLDER -t metadb_backup.xx-xx-xx_xx-xx-xx[.tar.gz] -h $REMOTE_IP -r $PATH_TO_BACKUP_FOLDER
```

5. 停止 metadb，启动 HENGSHI 服务，完成数据恢复操作。

```sh
bin/hengshi-sense-bin stop metadb
bin/hengshi-sense-bin start all
```

> \[!TIP] 提示
> 远程数据恢复时需要对远程设备有 ssh 访问权限，需要通过 scp 进行复制。

## 引擎的数据备份和恢复

引擎是衡石内部加速引擎，一般情况下不需要备份 engine 数据，当确定需要备份时可以按照下面的操作指导进行。

### 备份 engine

备份数据根据备份文件存储位置分为本地备份和远程备份。

#### 本地备份 engine

首先设置存放备份数据的绝对路径的变量 PATH_TO_BACKUP_FOLDER，然后执行备份命令，此时在 $PATH_TO_BACKUP_FOLDER 下生成 engine_backup.xx-xx-xx_xx-xx-xx 的备份目录，默认会保留最近3次备份。参考示例如下。

```shell
PATH_TO_BACKUP_FOLDER=/xxx
bin/dbbackup.sh -m engine -l $PATH_TO_BACKUP_FOLDER -t sql.gz
```

#### 远程备份 engine

远程备份需要设置 REMOTE_IP 和 PATH_TO_BACKUP_FOLDER 两个变量，其中 REMOTE_IP 用于存放远程设备的 ip 地址，PATH_TO_BACKUP_FOLDER 存放备份数据的绝对路径。然后执行远程备份命令后，在远程设备 REMOTE_IP 的 PATH_TO_BACKUP_FOLDER 下生成备份文件。参考示例如下。

```shell
PATH_TO_BACKUP_FOLDER=/xxx
bin/dbbackup.sh -m engine -l $PATH_TO_BACKUP_FOLDER -t sql.gz -h $REMOTE_IP -r $PATH_TO_BACKUP_FOLDER
```

> \[!TIP] 提示
> 远程备份数据时需要对远程设备有 ssh 访问权限，备份时需要使用 scp 进行复制。

### 恢复 engine

根据备份文件存放的地址，分为本地数据恢复和远程数据恢复。

#### 本地数据恢复 engine

使用本地备份的数据进行数据恢复时，请按照如下步骤进行操作。

1. 设置存放备份数据的绝对路径的变量 PATH_TO_BACKUP_FOLDER。

```sh
PATH_TO_BACKUP_FOLDER=/xxx
```

2. 停止 HENGSHI 服务，并移除 HENGSHI 系统中旧的数据库。

```sh
bin/hengshi-sense-bin stop all
mv engine-cluster engine-cluster.old
```

3. 初始化并启动 engine。

```sh
bin/hengshi-sense-bin init engine
bin/hengshi-sense-bin start engine
```

4. 使用本地存储的备份文件，进行 engine 的数据恢复。
   `-t` 参数视备份脚本新旧版本不同，生成的为tar.gz文件或者目录，而传入对应的文件或目录名

```sh
bin/dbrestore.sh -m engine -l $PATH_TO_BACKUP_FOLDER -t engine_backup.xx-xx-xx_xx-xx-xx[.tar.gz]
```

5. 停止 engine，启动 HENGSHI 服务，完成数据恢复操作。

```sh
bin/hengshi-sense-bin stop engine
bin/hengshi-sense-bin start all
```

#### 远程数据恢复 engine

当备份数据存在远程设备上时，请先确认是否对远程设备拥有 SSH 访问权限，如果没有请先获取 SSH 访问权限，然后按照下面指导进行数据恢复操作。

1. 设置远程设备的 ip 地址变量 REMOTE_IP 和存放备份数据的绝对路径的变量 PATH_TO_BACKUP_FOLDER。

```sh
PATH_TO_BACKUP_FOLDER=/xxx
REMOTE_IP=/xxx
```

2. 停止 HENGSHI 服务，并移动 HENGSHI 系统中旧的 engine 数据库。

```sh
bin/hengshi-sense-bin stop all
mv engine-cluster engine-cluster.old
```

3. 初始化并启动 engine。

```sh
bin/hengshi-sense-bin init engine
bin/hengshi-sense-bin start engine
```

4. 使用远程设备上存储的备份文件，进行 engine 的数据恢复。

```sh
bin/dbrestore.sh -m engine -l $PATH_TO_BACKUP_FOLDER -t engine_backup.xx-xx-xx_xx-xx-xx[.tar.gz] -h $REMOTE_IP -r $PATH_TO_BACKUP_FOLDER
```

5. 停止 engine，启动 HENGSHI 服务，完成数据恢复操作。

```sh
bin/hengshi-sense-bin stop engine
bin/hengshi-sense-bin start all
```

> \[!TIP] 提示
> 远程数据恢复时需要对远程设备有 ssh 访问权限，需要通过 scp 进行复制。

## 数据库客户端环境变量配置

当您使用自己团队的 metadb 时，那么 metadb 的升级、备份和恢复过程中可能会发生客户端版本不一致问题，这种情况下请先配置 EXTERNAL_DB_PG_PATH 环境变量指定客户端路径。请参考下面示例进行配置。每次版本升级、备份和数据恢复都需要配置。

```shell
## 临时生效 每次升级 备份 恢复 需执行一次
$ export EXTERNAL_DB_PG_PATH=/user/lib/pgsql-version/
```

## 对象存储 Minio 的备份和恢复

对象存储 Minio 服务是衡石内部图片存储服务。

### 备份数据

备份数据根据备份文件存储位置分为本地备份和远程备份。

#### 本地备份

首先设置变量 PATH_TO_BACKUP_FOLDER 存放备份数据的绝对路径，然后执行备份命令。此时在$PATH_TO_BACKUP_FOLDER 下生成 minio_backup.xx-xx-xx_xx-xx-xx.tar.gz 的备份文件，默认会保留最近3次备份的文件。参考示例如下。

```shell
PATH_TO_BACKUP_FOLDER=/xxx
bin/dbbackup.sh -m minio -l $PATH_TO_BACKUP_FOLDER
```

#### 远程备份

远程备份需要设置 REMOTE_IP 和 PATH_TO_BACKUP_FOLDER 两个变量，其中 REMOTE_IP 用于存放远程设备的 ip 地址，PATH_TO_BACKUP_FOLDER 存放备份数据的绝对路径。然后执行远程备份命令后，在远程设备 REMOTE_IP 的 PATH_TO_BACKUP_FOLDER 下生成备份文件。参考示例如下。

```shell
PATH_TO_BACKUP_FOLDER=/xxx
bin/dbbackup.sh -m minio -l $PATH_TO_BACKUP_FOLDER -h $REMOTE_IP -r $PATH_TO_BACKUP_FOLDER
```

> \[!TIP] 提示
> 远程备份数据时需要对远程设备有 ssh 访问权限，备份时需要使用 scp 进行复制。

### 恢复数据

根据备份文件存放的地址，分为本地数据恢复和远程数据恢复。

#### 本地数据恢复

使用本地备份的数据进行数据恢复时，请按照如下步骤进行操作。

1. 设置存放备份数据的绝对路径的变量 PATH_TO_BACKUP_FOLDER。

```sh
PATH_TO_BACKUP_FOLDER=/xxx
```

2. 停止 HENGSHI 服务，并移除 HENGSHI 系统中旧的数据存储目录。

```sh
bin/hengshi-sense-bin stop all
mv minio-data minio-data.old
```

3. 使用本地存储的备份文件，进行 minio 的数据恢复。

```sh
bin/dbrestore.sh -m minio -l $PATH_TO_BACKUP_FOLDER -t minio_backup.xx-xx-xx_xx-xx-xx.tar.gz
```

4. 启动 HENGSHI 服务，完成数据恢复操作。

```sh
bin/hengshi-sense-bin start all
```

#### 远程数据恢复

当备份数据存在远程设备上时，请先确认是否对远程设备拥有 SSH 访问权限，如果没有请先获取 SSH 访问权限，然后按照下面指导进行数据恢复操作。

1. 设置远程设备的 ip 地址变量 REMOTE_IP 和存放备份数据的绝对路径的变量 PATH_TO_BACKUP_FOLDER。

```sh
PATH_TO_BACKUP_FOLDER=/xxx
REMOTE_IP=/xxx
```

2. 停止 HENGSHI 服务，并移除 HENGSHI 系统中旧的数据库。

```sh
bin/hengshi-sense-bin stop all
mv minio-data minio-data.old
```

3. 使用远程设备上存储的备份文件，进行 minio 的数据恢复。

```sh
bin/dbrestore.sh -m minio -l $PATH_TO_BACKUP_FOLDER -t minio_backup.xx-xx-xx_xx-xx-xx.tar.gz -h $REMOTE_IP -r $PATH_TO_BACKUP_FOLDER
```

4. 启动 HENGSHI 服务，完成数据恢复操作。

```sh
bin/hengshi-sense-bin start all
```

> \[!TIP] 提示
> 远程数据恢复时需要对远程设备有 ssh 访问权限，需要通过 scp 进行复制。
