# 错误码

本文总结了使用 OBD 过程中可能会遇到的相关报错，主要包括以下几个方面。

## 通用报错

### OBD-1000：Configuration conflict x.x.x.x: xxx port is used for x.x.x.x

错误原因：配置文件中存在端口冲突。

解决方法：请您检查配置并进行修改。

### OBD-1001：x.x.x.x:xxx port is already used

错误原因：端口已经被占用。

解决方法：请您检查配置并更换端口。

### OBD-1002：Fail to init x.x.x.x path

错误原因：

1. 配置文件中的 user 用户（未填的情况下默认为当前用户）没有对应目录的写权限。
  
2. home_path 不为空

您可根据报错的具体信息进行判断。

解决方法：

对于情况 1，您可通过以下两种方式解决。

- 运行命令添加或修改 user 信息。
  
  ```shell
  obd cluster edit-config <deploy name> 
  ```

- 登陆到目标机器，为当前账号赋予对应目录的写权限。

对于情况 2，您也可通过以下两种方式解决。

- 选择其他目录。
  
- 若您确认该目录可以被清空，也可使用 `-f` 选项，OBD 将会使用当前用户去清空该目录。

### OBD-1003：fail to clean x.x.x.x:xxx

错误原因：检查配置文件中的 user 用户（未填的情况下默认为当前用户）是否有 home_path 的写权限。

解决方法：您可通过以下两种方式解决。

- 运行命令添加或修改 user 信息。
  
  ```shell
  obd cluster edit-config <deploy name> 
  ```

- 登陆到目标机器，为当前账号赋予对应目录的写权限。

### OBD-1004：Configuration conflict x.x.x.x: xxx is used for x.x.x.x

错误原因：配置文件中存在路径冲突。

解决方法：请您检查配置并进行修改。

### OBD-1005：Some of the servers in the cluster have been stopped

错误原因：后续的操作需要所有的机器的服务全部在线，而当前配置内的部分机器已经停止。

解决方法：您可使用 `obd cluster start <deploy_name> --wop` 无参启动，将全部的服务拉起。

### OBD-1006：Failed to connect to xxx

错误原因：

1. OBD 和目标机器之间网络不连通。

2. 对应的组件进程已经退出或者不提供服务。

3. 账号密码不匹配。

解决办法：

对于情况 1，请自行修复网络。

对于情况 2，可尝试再次启动组件，如果依旧启动失败，请参考启动失败的错误进行排查，如 **OBD-2002**。

对于情况 3，常见原因是用户直接执行 SQL 命令修改了密码，账号密码与配置文件中存储的不同导致 OBD 连接不到组件。该种情况下有以下两种解决办法。

1. 执行 SQL 命令将密码改回与 OBD 储存的密码一致。

2. 执行 `vi ~/.obd/cluster/<deploy name>/config.yaml` 修改对应的密码使其与组件中实际密码一致。

### OBD-1007：(x.x.x.x) xxx must not be less than xxx (Current value: xxx)

错误原因：ulimits 配置不满足要求。

解决办法：可通过修改 /etc/security/limits.d/ 目录下对应文件和 /etc/security/limits.conf 使其满足要求。

## OceanBase 部署相关报错

### OBD-2000：x.x.x.x not enough memory

错误原因：内存不足。

解决方法：OBD 的启动严格按照 MemAvailable 来计算内存。如果存在可以释放的 cached，您可以先使用以下命令尝试释放。

```shell
echo 3 > /proc/sys/vm/drop_caches
```

如果内存仍然不足请通过 `edit-config` 调整 `memory_limt` 和 `system_memory`，通常情况下 `memory_limt/3 ≤ system_memory ≤ memory_limt/2`。

> **注意**
>
> `memory_limt` 不能低于 8G，即您的可用内存必须大于等于 8G。

### OBD-2001：server can not migrate in

错误原因：可用的 unit 数小于 `--unit-num`。

解决方法：请您修改传入的 `--unit-num`。您可使用以下命令查看当前可用的 unit 数。

```sql
select count(*) num from oceanbase.__all_server where status = 'active' and start_service_time > 0
```

### OBD-2002：failed to start x.x.x.x observer

错误原因：出现该报错的原因有很多，常见的原因有以下两种。

- `memory_limit` 小于 8G。

- `system_memory` 太大或太小。通常情况下 `memory_limt/3 ≤ system_memory ≤ memory_limt/2`。

解决方法：

- 若排查后发现该报错为上述两条原因造成，根据对应原因进行调整即可；

- 若排查后发现不是由上述两条原因引起的报错，您可到官网 [问答区](https://ask.oceanbase.com/) 进行提问，会有专业人员为您解答。

### OBD-2003：not enough disk space for clog. Use redo_dir to set other disk for clog, or reduce the value of datafile_size

错误原因：磁盘使用率高于使用率要求。

解决方法：请您对磁盘的存储进行调整。

- 若您采用的是自动部署方式，要求磁盘使用率不能高于 72%。
  
- 若您采用的是手动部署的方式，在不更改配置的情况下，要求磁盘使用率不能高于 64%。

> **注意**
>
> 在 redo_dir 和 data_dir 同盘的情况下，计算磁盘使用率时会算上 datafile 将要占用的空间。

### OBD-2004：Invalid: xxx is not a single server configuration item

错误原因：修改的配置项是一个全局配置项，不能对某个 server 单独修改。

解决方法：您可将需修改的配置改放到 global 下。

## 测试相关报错

### OBD-3000：parse cmd failed

错误原因：mysqltest 初始化文件必须是以 `.sql` 结尾的 sql 文件。

解决方法：请您检查 `--init-sql-files` 的参数是否满足此要求。

### OBD-3001：xxx.sql not found

错误原因：mysqltest 初始化时找不到对应的初始化文件。

解决方法：请您检查 `--init-sql-dir` 目录下是否包含 `--init-sql-files` 声明的文件。

### OBD-3002：Failed to load data

错误原因：出现该报错的原因有很多，常见的原因有以下两种。

1. 租户资源不足或者压力过大。

2. 数据构建脚本报错。

解决方法：

对于情况 1，可使用资源规格更大的租户，或者调整 warehouses、load-workers 等参数值以减少构建压力。

对于情况 2，由于数据构建脚本是由 TPC 官网提供，可以先尝试重新执行脚本，如果问题仍然存在请到官网 [问答区](https://ask.oceanbase.com/) 提问，会有专业人员为您解答。

### OBD-3003：Failed to run TPC-C benchmark

错误原因：

1. 测试进程卡死后因为超时被杀死。

2. TPC-C 测试命令返回报错。

解决方法：

- 直接重新测试，或通过调整 terminals 等参数减少测试压力后重新测试。

- 如果没有使用官网提供的 obtpcc 包，请使用 obtpcc 进行测试。

如果上述方法均无法解决问题，请到官网 [问答区](https://ask.oceanbase.com/) 提问，会有专业人员为您解答。

## obagent 相关报错

### OBD-4000：Fail to reload x.x.x.x

错误原因：该节点的 `http_basic_auth_password` 与 OBD 中存储的 `http_basic_auth_password` 不符，导致 OBD 不能正确的访问 obagent。

解决方法：若您确认二者相符，请检查此次修改的选项中是否包含了当前版本不支持的配置项或者配置项名称是否书写错误。

### OBD-4001：Fail to send config file to x.x.x.x

错误原因：出现该报错的原因有两点，请您依次进行检查。

- obagent home_path 磁盘空间是否充足。

- 配置文件中的 user 用户（未填的情况下默认为当前用户）是否拥有 obagent home_path 的写权限。

解决方法：您可通过以下两种方式解决。

- 运行命令添加或修改 user 信息。
  
  ```shell
  obd cluster edit-config <deploy name>
  ```

- 登陆到目标机器，为当前账号赋予对应目录的写权限。
