---
title: OBServer 启动失败，错误代码 4070 -OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于 OBServer 启动失败，错误代码 4070 相关的常见问题和使用技巧，帮助您快速解决 OBServer 启动失败，错误代码 4070 的难题。
---
切换语言

- 简体中文
- English

划线反馈

# OBServer 启动失败，错误代码 4070

更新时间：2026-05-06 09:11

适用版本： V2.1.x、V2.2.x、V3.1.x、V3.2.x 内容类型：Troubleshoot  

介绍 observer 进程启动失败报 4070 错误时，如何进行问题排查并解决问题。

## 问题描述

observer 进程启动失败，错误信息如下。

```shell
[admin@hostname oceanbase]$ ./bin/observer
[2019-06-03 22:00:27.989583] ERROR [SHARE] load_config (ob_config_manager.cpp:94) [1899][Y0-0000000000000000] [lt=130] Deserialize server config failed(path="etc/observer.config.bin", ret=-4070) BACKTRACE:0x30fab39 0x3088b57 0x5867d5 0x1bb281e 0x12d300d 0x12d8238 0x40e96d 0x7f6b82983445 0x42e0b5
[2019-06-03 22:00:27.994936] WARN  [SHARE] strict_check_special (ob_server_config.cpp:171) [1899][Y0-0000000000000000] [lt=4] invalid cluster id(ret=-4147, cluster_id.str()="0")
[2019-06-03 22:00:27.994948] ERROR [SERVER] init_config (ob_server.cpp:585) [1899][Y0-0000000000000000] [lt=9] some config setting is not valid(ret=-4147) BACKTRACE:0x30fab39 0x3088b57 0x431b49 0x12d3790 0x12d8238 0x40e96d 0x7f6b82983445 0x42e0b5
[2019-06-03 22:00:27.994970] ERROR [SERVER] init (ob_server.cpp:105) [1899][Y0-0000000000000000] [lt=21] init config fail(ret=-4147) BACKTRACE:0x30fab39 0x3088b57 0x431b49 0x12d8754 0x40e96d 0x7f6b82983445 0x42e0b5
[2019-06-03 22:00:27.994986] WARN  [SERVER] destroy (ob_server.cpp:200) [1899][Y0-0000000000000000] [lt=13] destroy observer begin

```

## 问题原因

可以通过如下步骤排查错误原因：

1. 通过错误信息第一行给出的信息，判断是 observer 进程在读取配置文件时发生了错误，因此使用以下命令查看配置文件。

   ```shell
   [admin@hostname ~]$ cat /home/admin/oceanbase/etc/observer.config.bin

   ```
 2. 发现执行 `cat` 命令返回为空，使用 Vim 编辑器打开文件时显示乱码，说明导致 observer 进程启动失败的原因是由于配置文件损坏。

## 背景信息

`observer.config.bin` 文件存放在 `/home/admin/oceanbase/etc` 目录中。在 OBServer 启动时，该文件用于获取之前的参数设置。如果该文件不存在或文件不可用，OBServer 会使用默认参数启动，而对于实际应用场景，默认参数往往不能满足启动要求，例如 zone 的名称、rootservice_list 等参数都需要根据实际情况指定。该文件的更新动作是随时发生的，任何系统参数的更改都会记录在这个文件中。对于该文件中没有的参数，系统会使用默认值。

`observer.config.bin.history` 文件是 `observer.config.bin` 文件的备份。在这两个文件没有损坏的前提下，每次重启 observer 进程，OBServer 都将进行如下操作：

1. 将 `observer.config.bin.history` 文件删除。
 2. 将 `observer.config.bin` 文件重新命名为 `observer.config.bin.history` 文件。
 3. 新生成一个 `observer.config.bin` 文件，并且在当前 observer 进程的生命周期中，根据用户更改系统参数的情况，记录和更新这个最新生成的 `observer.config.bin` 文件。

如果 `observer.config.bin` 文件损坏，将导致启动 observer 进程失败。造成文件损坏的原因有很多，比较常见的原因是机器意外重启或者断电。

## 解决方法

对于 2-2-2 及以上集群，可以将同一个 Zone 中另一台 OBServer 上的 `observer.config.bin` 复制到故障 OBServer 上。

#### 说明

对于 2-2-2 集群，相同 Zone 中的配置文件 `observer.config.bin` 在同一个 Zone 内的节点上基本相同（仅节点级配置会有区别），不会影响文件的 checksum 校验。

步骤如下：

1. 登录同一个 Zone 的另一台 OBServer，执行远程复制命令，将该 OBServer 的 `observer.config.bin` 文件 复制到故障的 OBServer 上。

   其中 *observer_ip* 表示故障 OBServer 的 IP 地址。

   ```unknow
   [root@hostname /]# scp /home/admin/oceanbase/etc/observer.config.bin root@<observer_ip>:/home/admin/oceanbase/etc/

   ```
 2. 启动故障的 OBServer。

   ```unknow
   [root@hostname /]# su admin
   [admin@hostname /]$ cd /home/admin/oceanbase && ./bin/observer

   ```

对于 1-1-1 集群，该文件在每个节点的配置会存在不同，手动修改将导致头部的 checksum 校验失败，因此不能简单复制其他正常节点的 `observer.config.bin` 到已经发生问题的节点上。

可以通过以下步骤来解决问题。

1. 删除损坏的 `observer.config.bin`文件。

   ```shell
   [admin@hostname ~]$ rm -rf /home/admin/oceanbase/etc/observer.config.bin

   ```
 2. 手动启动 observer 进程。

   使用 `-z` 参数指定副本的 zone 名称，使用 `-o` 参数指定 rootservice_list。如果有其他参数，可以追加到 `-o` 参数指定的字符串中，各参数间通过逗号（","）分隔。

   例如，要启动的 OBServer 副本的 zone 名称为 `ZONE_3`，rootservice_list 参数为``xxx.xxx.xx.xxa:2882:2881;``xxx.xxx.xx.xxb:2882:2881;xxx.xxx.xx.xxc:2882:2881``，并需要添加额外参数`memory_limit_percentage=90` 来配置租户的内存使用率，则启动命令为：

   ```shell
   [admin@hostname ~]$ cd oceanbase
   [admin@hostname oceanbase]$ ./bin/observer  -z ZONE_3 -o "rootservice_list=xxx.xxx.xx.xxa:2882:2881;xxx.xxx.xx.xxb:2882:2881;xxx.xxx.xx.xxc:2882:2881,memory_limit_percentage=90"

   ```

   #### 说明

   如果忘记了之前的参数值，同时 `observer.config.bin`文件损坏导致无法读取，可以通过读取其他正常节点的 `observer.config.bin` 文件获取参数值。方法为：

   ```
      strings /home/admin/oceanbase/etc/observer.config.bin

   ```

   也可以读取本地的 `observer.config.bin.history`，方法为：

   ```
      strings /home/admin/oceanbase/etc/observer.config.bin.history

   ```
 3. 启动后，检查 `__all_server` 系统表，通过以下 SQL 查看各副本状态是否均为 `active`，并且`start_service_time` 的值不为 0。如果返回了所有的节点信息，则表示 OBServer 能够正常启动。

   ```sql
   obclient> SELECT * FROM __all_server WHERE start_service_time <> 0 AND status='active';

   ```
 4. 通过以下命令确认 `observer.config.bin` 文件存在并可读。

   如果返回结果为各配置项的详细信息，则说明问题已经解决。

   ```shell
   [admin@hostname oceanbase]$ strings /home/admin/oceanbase/etc/observer.config.bin

   ```

Previous

[OBServer 启动失败，错误代码 4016](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000000004)

Next

[Bootstrap 后节点未启动](https://www.oceanbase.com/knowledge-base/oceanbase-database-20000000097) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
