blob: aee59d1602ebe76c674a5a16de08aae2d6150d2a [file] [log] [blame] [view]
<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
-->
# 全量备份工具
## 1. 概述
IoTDB 全量备份工具,用于将 IoTDB 单个节点的数据通过硬链接的方式备份到本地指定地址,并可以直接启动加入原集群。备份工具提供了两种模式:快速镜像模式和手动指定备份路径模式。
> 注意:
>
> * 备份前请停止IoTDB服务。
> * 脚本默认后台执行,执行过程中打印的相关信息会输出到日志文件中。
> * IoTDB版本要求:不能低于v1.3.2
## 2. 备份模式
### 2.1 模式一:快速镜像模式
#### 使用方法
```Bash
backup.sh/backup.bat -quick -node xxx
# xxx可选值见如下示例
backup.sh/backup.bat -quick -node
# 备份所有节点到默认路径
backup.sh/backup.bat -quick -node all
# 备份所有节点到默认路径
backup.sh/backup.bat -quick -node confignode
# 仅备份confignode节点到默认路径
backup.sh/backup.bat -quick -node datanode
# 仅备份datanode节点到默认路径
```
#### 参数说明
| **参数** | **说明** | **是否必填** |
| ---------------- |---------------------------------------------------------------------------------------------------------------------------------------------------------------| -------------------- |
| `-quick` | 快速镜像 | 非必填 |
| `-node` | 备份节点类型,可选项包括`all`/`datanode`/`confignode`,空值默认为`all`。 <br> `all`:备份`datanode`和`confignode`节点 <br>`datanode`:只备份`datanode`节点 <br> `confignode`:只备份`confignode`节点 | 非必填 |
说明:
1. 校验当前 `IoTDB` 文件夹及根据配置文件列出所有配置路径是否已经存在`_backup`文件夹,如果存在则退出,信息为 `The backup folder already exists`(备份文件夹已经存在)。
> 当备份文件夹已存在时,可以尝试通过如下方式解决:
> * 删除已有的 _backup 文件夹后重新执行备份。
> * 修改备份路径避免冲突。
2. 给原 `dn_data_dirs` 配置路径新建硬连接到对应的 `_backup` 路径 例如:`dn_data_dirs=/data/iotdb/data/datanode/data` 则备份完后数据在 `/data/iotdb/data/datanode/data_backup`
3. 拷贝出`dn_data_dirs` 其他文件到原 `IoTDB`文件夹到对应的 `_backup` 路径中 例如:`/data/iotdb `备份后 `/data/iotdb_backup`
### 2.2 模式二:手动指定模式
#### 使用方法
```Bash
backup.sh -node xxx -targetdir xxx -targetdatadir xxx -targetwaldir xxx
```
#### 参数说明
| **参数** | **说明** | **是否必填** |
| ---------------------- | ------------------------------------------------------------------------------------------ | -------------------- |
| `-node` | 备份节点类型`all`/`datanode`/`confignode`默认值`all` | 非必填 |
| `-targetdir` | `IoTDB`要备份到的文件夹 | 必填 |
| `-targetdatadir` | 配置项`dn_data_dirs`路径下文件要备份到的路径,默认`targetdir/data/datanode/data` | 非必填 |
| `-targetwaldir` | 配置项`dn_wal_dirs`路径下文件要备份到的路径,默认`targetdir/data/datanode/wal` | 非必填 |
说明:
1. 校验参数 `-targetdir` 为必填项 ,如果参数不存在,则输出 `-targetdir cannot be empty, The backup folder must be specified`(`-targetdir` 参数不能为空,必须指定备份文件夹路径)。
2. 对比配置文件中`dn_data_dirs`,`dn_wal_dirs` 配置路径模式和参数 `-targetdatadir`,`-targetwaldir`是否一致,如果`-targetdatadir`, `-targetwaldir`参数为单一路径则认为一致,如果不一致,输出` -targetdatadir parameter exception, the number of original paths does not match the number of specified paths`(`-targetdatadir` 参数异常,原本路径个数跟现在指定路径个数不一致)。
3. 校验 `-targetdatadir` 配置的路径是否和原配置路径在同一块盘,如果不是同一块盘,则拷贝 `dn_data_dirs` 配置的文件到参数 `-targetdatadir` 对应目录。如果是同一块盘,则优先打硬连接 `dn_data_dirs` 配置的文件到参数 `-targetdatadir` 对应目录,如果打硬连接失败就拷贝文件到`-targetdatadir` 对应目录
4. 配置文件路径与目标路径匹配规则
* **多对一**:多个源路径可以备份到一个目标路径。
* **一对一**:一个源路径可以备份到一个目标路径。
* **多对多**:多个源路径可以备份到多个目标路径,但需要模式匹配。
#### 示例
| **配置文件路径** | **参数 `-targetdatadir` 路径** | **校验结果** |
|--------------------------------|-----------------------------------------------------------|---------------------|
| /data/iotdb/data/datanode/data | /data/iotdb\_backup/data/datanode/data | 一致 |
| /data/iotdb/data/datanode/data | /data/iotdb\_backup/data/datanode/data1,/data/iotdb\_backup/data/datanode/data2 | 不一致 |
| /data/iotdb/data/datanode/data1,/data/iotdb/data/datanode/data2 | /data/iotdb\_backup/data/datanode/data | 一致 |
| /data/iotdb/data/datanode/data1,/data/iotdb/data/datanode/data2 | /data/iotdb\_backup/data/datanode/data3,/data/iotdb\_backup/data/datanode/data4 | 一致 |
| /data/iotdb/data/datanode/data1,/data/iotdb/data/datanode/data2;/data/iotdb/data/datanode/data3 | /data/iotdb\_backup/data/datanode/data | 一致 |
| /data/iotdb/data/datanode/data1,/data/iotdb/data/datanode/data2;/data/iotdb/data/datanode/data3 | /data/iotdb\_backup/data/datanode/data1;/data/iotdb\_backup/data/datanode/data1 | 一致 |
| /data/iotdb/data/datanode/data1,/data/iotdb/data/datanode/data2;/data/iotdb/data/datanode/data3 | /data/iotdb\_backup/data/datanode/data1,/data/iotdb\_backup/data/datanode/data3;/data/iotdb\_backup/data/datanode/data | 一致 |
| /data/iotdb/data/datanode/data1,/data/iotdb/data/datanode/data2;/data/iotdb/data/datanode/data3 | /data/iotdb\_backup/data/datanode/data1,/data/iotdb\_backup/data/datanode/data3;/data/iotdb\_backup/data/datanode/data1,/data/iotdb\_backup/data/datanode/data4 | 不一致 |
#### 匹配规则总结
* 当 `dn_data_dirs` 仅有 `;` 分割时:
**规则**:* `-targetdatadir` 可以只输入一个路径(路径中没有 `;` 和 `,`)。
* `-targetdatadir` 也可以按照 `;` 分割多个路径,但数量必须和 `dn_data_dirs` 中的路径数量相等,且路径中不能有 `,`。
* 当 `dn_data_dirs` 仅有 `,` 分割时:
**规则**:* `-targetdatadir` 可以只输入一个路径(路径中没有 `;` 和 `,`)。
* `-targetdatadir` 也可以按照 `,` 分割多个路径,但数量必须和 `dn_data_dirs` 中的路径数量相等,且路径中不能有 `;`。
* 当 `dn_data_dirs` 同时有 `;` 和 `,` 分割时:
**规则**:* `-targetdatadir` 可以只输入一个路径(路径中没有 `;` 和 `,`)。
* `-targetdatadir` 也可以优先按照 `;` 分割多个路径,数量必须和 `dn_data_dirs` 中的路径数量相等。每个 `;` 分割的路径中可以只输入一个路径,也可以按照 `,` 分割多个路径,但`,`分割的路径数量必须相等。
> `wal` 路径通常通过 `dn_wal_dirs` 参数指定,规则同上