---
title: "通过命令行部署 ODP - 数据库代理  V4.3.5 | OceanBase 文档中心"
description: 通过命令行部署 ODP ODP 可以将用户发起的数据访问请求转发到正确的 OBServer 节点上，转发到后端 OBServer 节点的请求返回数据时，依然要通过 ODP 回发给客户端。本节主要介绍通过使用 RPM 包安装 ODP。 您也可以通过如下两种方法部署 ODP： 使用 OCP 安装部署 ODP，详细操作请参…
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

文档反馈![](https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*nSAhQbrBXKwAAAAAAAAAAAAADiGDAQ/original) 数据库代理 V 4.3.5

# 通过命令行部署 ODP

更新时间：2026-01-05 17:05:14

[编辑](https://github.com/oceanbase/oceanbase-proxy-doc/edit/V4.3.5/zh-CN/200.install/100.install-odp.md)  

ODP 可以将用户发起的数据访问请求转发到正确的 OBServer 节点上，转发到后端 OBServer 节点的请求返回数据时，依然要通过 ODP 回发给客户端。本节主要介绍通过使用 RPM 包安装 ODP。

您也可以通过如下两种方法部署 ODP：

- 使用 OCP 安装部署 ODP，详细操作请参见 [使用 OCP 部署 ODP](https://www.oceanbase.com/docs/common-odp-doc-cn-1000000003575310)。
 - 使用 obd 安装部署 ODP，详细操作请参见 [使用 obd 部署 ODP](https://www.oceanbase.com/docs/common-odp-doc-cn-1000000003575307)

#### 注意

- ODP 在任何一台机器上部署后，通过向外暴露一个 `ip:port` 来提供 OceanBase 的代理服务。用户可以像访问 MySQL 数据库一样通过该 `ip:port` 访问 OceanBase 数据库，一般推荐部署在 OBServer 节点上。
 - 建议一台机器上只部署一个 ODP 服务，并且使用约定的 2883 端口。当同一台机器上部署多个 ODP 服务时，需要指定不同端口和不同的配置文件路径予以区分，端口可以自定义为 3306 或 1521、或者其他端口。
 - 本文中的示例 IP 均做了脱敏处理，在使用对应命令时应根据自己机器真实 IP 填写。

## 环境准备

- 平台：X86_64、ARM
 - 操作系统：Linux Redhat 5u|6u|7u x86-64 及以上
 - CPU：ODP 启动成功后，CPU 占用 0.7 C 左右
 - 内存：ODP 启动成功后，内存占用 100M 左右
 - 磁盘空间：对磁盘大小没有特别需求，根据数据大小决定，推荐 10G 及以上
 - OceanBase 集群：详细信息请参考 **OceanBase 数据库文档** 中 [部署数据库](https://www.oceanbase.com/docs/common-oceanbase-database-1000000000033157) 章节。

## 安装 ODP

1. 在 root 用户下执行如下命令添加 sudoers 文件的写权限

   ```bash
   # 添加 sudoers 文件的写权限
   chmod u+w /etc/sudoers
   echo 'admin ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers

   # 撤销 sudoers 文件写权限
   chmod u-w /etc/sudoers

   ```
 2. 执行如下命令安装 ODP 的 RPM 包：

   ```bash
   -bash-4.2$ cd $rpm_dir
   -bash-4.2$ sudo rpm -ivh $rpm_name

   ```

   其中 `$rpm_dir` 表示存放 RPM 包的目录，`$rpm_name` 表示 RPM 包的名称。

   #### 说明

      - 您可联系技术人员获取最新的 ODP RPM 包，也可在 [OceanBase 软件下载中心](https://www.oceanbase.com/softwarecenter) 页面搜索 **OceanBase 数据库代理**，根据实际情况下载对应的 ODP RPM 包。
      - ODP 企业版默认安装目录在 `/opt/taobao/install` 下，社区版默认安装目录在 `/home/admin` 下。  

   示例如下：

   ```bash
   -bash-4.2$ sudo rpm -ivh obproxy-4.0.0-20221103165243.el7.x86_64.rpm
   Preparing...                          ################################# [100%]
   Updating / installing...
      1:obproxy-4.0.0-20221103165243.el7 ################################# [100%]

   ```
 3. （可选）创建到 ODP 的软链接

   创建到 ODP 的软链接可以隐藏掉版本信息，方便后期操作。此处以企业版 ODP 为例介绍创建软链接操作。

   ```bash
   -bash-4.2$ cd /opt/taobao/install
   -bash-4.2$ sudo ln -s obproxy-4.0.0 obproxy
   -bash-4.2$ ll
   total 8
   drwxr-xr-x 9 root  root  4096 Sep 26 15:24 ajdk-8.3.6-b129
   lrwxrwxrwx 1 root  root    13 Nov 14 12:03 obproxy -> obproxy-4.0.0
   drwxr-xr-x 4 admin admin 4096 Nov 14 11:59 obproxy-4.0.0

   # 把 obproxy 的所有者和所属组都改为 admin。
   -bash-4.2$ sudo chown -R admin:admin obproxy
   -bash-4.2$ ll
   total 8
   drwxr-xr-x 9 root  root  4096 Sep 26 15:24 ajdk-8.3.6-b129
   lrwxrwxrwx 1 admin admin   13 Nov 14 12:03 obproxy -> obproxy-4.0.0
   drwxr-xr-x 4 admin admin 4096 Nov 14 11:59 obproxy-4.0.0

   ```

## 初始化 ODP

ODP 需要跟后端 OBServer 节点保持通信，所以需要提前在 OceanBase 集群的 sys 租户下为 ODP 创建连接用户（`proxyro`）和密码。后续在启动 ODP 时可通过设置 proxy 启动参数的方式来告知 proxy。

#### 说明

proxyro 用户是 ODP 访问 OceanBase 集群的用户。一个 OceanBase 集群对应一个 proxyro 账号。

您可参考如下步骤查看集群中是否存在 proxyro 用户：

1. 通过 IP 直连的方式登录到集群。

   ```bash
   obclient -h10.10.10.1 -uroot@sys -P2881 -p -c -A

   ```
 2. 执行以下命令查看 sys 租户下的用户。

   ```sql
   obclient> select user,password from mysql.user;

   ```

   若输出结果显示已有 proxyro 用户，可直接执行 [启动 ODP](#启动%20ODP)。若输出结果中无 proxyro 用户，可参考下述命令创建 proxyro 用户。
 3. 创建 proxyro 用户。

   示例如下：

   ```sql
   obclient> CREATE USER proxyro IDENTIFIED BY '******';
   Query OK, 0 rows affected

   obclient> GRANT SELECT ON *.* TO proxyro;
   Query OK, 0 rows affected

   obclient> SHOW GRANTS FOR proxyro;
   +----------------------------------+
   | Grants for proxyro@%             |
   +----------------------------------+
   | GRANT SELECT ON *.* TO 'proxyro' |
   +----------------------------------+
   1 row in set

   ```

## 启动 ODP

支持通过以下两种方式来启动 ODP 进程：

- 在启动命令中指定 `-r` 参数来指定 OceanBase 集群的 RootServer 信息

  该启动方式不需要额外配置，一般用于开发调试阶段。通过该方法启动 ODP 后，当 OceanBase 数据库中 Root Service 列表有变动时，需手动更新 `rootservice_list` 配置项，并重启 ODP 使配置生效。
 - 在启动命令中指定 `obproxy_config_server_url` 参数项来查询获取 OceanBase 集群的 RootServer 信息

  该方式需要配置 `obproxy_config_server_url`，故会依赖 Config Server 的启动。推荐使用该方式启动 ODP。

#### 注意

启动 ODP 时，请使用 admin 用户登录并在 ODP 软件的 home 目录下执行启动命令。使用其他用户或者在其他目录下启动 ODP 都可能带来问题。

### 操作步骤

1. 使用 admin 用户登录到待启动的 ODP 所在的机器。
 2. 在 ODP 的安装目录下执行如下命令，启动 ODP。

   #### 说明

   在启动 ODP 前，如果需要了解 ODP 的启动参数有哪些，可以通过 `./bin/obproxy -h` 命令查看。

      1. 方法一：在启动命令中指定 `-r` 参数，命令如下

        ```bash
        ./bin/obproxy -p <obproxy_port> -s <rpc_port> -r <'ip:port'> -n <appname> -o -c <cluster_name>

        ```

        其中：

             - `-p` ：指定 ODP 监听的端口号，客户端通过 MySQL 连接该端口访问 OceanBase 数据库。仅在第一次启动时需要指定该参数，后续续日常启动或升级等均不需要添加此参数。
             - `-s`：指定 RPC 服务监听端口。
             - `-r`：指定的 OceanBase 集群的 RootServer 信息，包括 IP 地址和端口号信息。该 Port 指的是 OBServer 节点的 SQL Port，不是 RPC Port。
             - `-n`（可选）：用于指定待启动的 ODP 的应用名。

              ODP 的应用名可以通过 `app_name` 配置项来修改，默认为 `undefined`。
             - `-o`：指定硬件或者内核参数配置。如果不指定，则使用系统默认配置。
             - `-c`：指定 OceanBase 集群。

        示例：

        ```bash
        [admin@001 obproxy]$ ./bin/obproxy -p 2883 -s 2885 -r'10.10.10.1:2881;10.10.10.2:2881;10.10.10.3:2881' -o observer_sys_password=$sha1_value,obproxy_sys_password=$sha1_value,enable_cluster_checkout=false,proxy_id=1,client_session_id_version=2 -n test -c mycluster

        ```

        #### 注意

             - `observer_sys_password` 需和 OceanBase 数据库中的 proxyro 用户密码一致，`obproxy_sys_password` 是使用 `root@proxysys` 账号登录 ODP 的密码。
             - `$sha1_value` 应根据实际设置密码替换。此处设置的密码是 sha1 后的值，而不是原始值。例如：proxyro 用户设置的密码是 `123456`，则需要设置 `observer_sys_password` 的值是 `7c4a8d09ca3762af61e59520943dc26494f8941b`。
             - `proxy_id` 配置为 1 仅为示例，您可将 `proxy_id` 配置为 0~8191 范围中除 2 以外的任意值，不与其他 ODP 重复即可。详细介绍可参见 [proxy_id](https://www.oceanbase.com/docs/common-odp-doc-cn-1000000003575542)。
      2. 方法二：在启动命令中指定 `obproxy_config_server_url` 参数，命令如下

        ```bash
        ./bin/obproxy -p <obproxy_port> -s <rpc_port> -n <appname> -o obproxy_config_server_url='your_config_url'

        ```

        其中：

             - `-p`：指定 ODP 监听的端口号，客户端通过 MySQL 连接该端口访问 OceanBase 数据库。仅在第一次启动时需要指定该参数，后续续日常启动或升级等均不需要添加此参数。
             - `-s`：指定 RPC 服务监听端口。
             - `-n`：指定应用名。

              ODP 的应用名可以通过 `app_name` 配置项来修改，默认为 `undefined`。
             - `-o`：指定硬件或者内核参数配置。如果不指定，则使用系统默认配置。
             - `obproxy_config_server_url`：指定 Config Server 的访问地址。

        示例：

        ```bash
        [admin@001 obproxy]$ ./bin/obproxy -p 2883 -s 2885 -n test -o obproxy_config_server_url='http://xx.xx.xx.xx:8877/obproxy_config',observer_sys_password=$sha1_value,obproxy_sys_password=$sha1_value,proxy_id=1,client_session_id_version=2

        ```

        #### 注意

             - `observer_sys_password` 需和 OceanBase 数据库中的 proxyro 用户密码一致，`obproxy_sys_password` 是使用 `root@proxysys` 账号登录 ODP 的密码。
             - `$sha1_value` 应根据实际设置密码替换。此处设置的密码是 sha1 后的值，而不是原始值。例如：proxyro 用户设置的密码是 `123456`，则需要设置 `observer_sys_password` 的值是 `7c4a8d09ca3762af61e59520943dc26494f8941b`。
             - `proxy_id` 配置为 1 仅为示例，您可将 `proxy_id` 配置为 0~8191 范围中除 2 以外的任意值，不与其他 ODP 重复即可。详细介绍可参见 [proxy_id](https://www.oceanbase.com/docs/common-odp-doc-cn-1000000003575542)。
 3. 启动后，执行以下命令，查看 ODP 进程是否存在。

   ```bash
   [admin@001 ~]$ ps -ef | grep obproxy

   ```

## OceanBase 数据库连接示例

通过 ODP 连接时，用户名的格式需要包含集群名、实例名和用户名。格式有如下四种，常用格式为前两种。

- `用户名@租户名#集群名`
 - `集群名:租户名:用户名`
 - `集群名-租户名-用户名`
 - `集群名.租户名.用户名`

```bash
$ obclient -h10.10.10.1 -uroot@sys#mycluster -P2883 -p -c -A
Enter password:
# 或
$ obclient -h10.10.10.1 -umycluster:sys:root -P2883 -p -c -A
Enter password:

```

## 常见问题

问题描述：使用 ODP 连接 OceanBase 数据库报错如下。

```bash
ERROR 2013 (HY000): Lost connection to MySQL server at 'reading authorization packet', system error: 0

```

产生原因：ODP 中 `observer_sys_password` 设置的密码和 OceanBase 数据库中 proxyro 用户的密码不一致，ODP 无法通过该用户与 OBServer 节点保持通信。

解决方法：您可根据实际情况选择如下两种解决方法。

1. 通过直连的方式连接 OceanBase 数据库后修改 proxyro 用户的密码，使之与启动 ODP 时设置的 `observer_sys_password` 参数密码一致。

   ```bash
   ALTER USER proxyro IDENTIFIED BY 'password';

   ```
 2. 使用 `root@proxysys` 账号登录 ODP，修改 `proxyro@sys` 的密码，修改后需要重启。

   ```sql
   alter proxyconfig set observer_sys_password = 'password';

   ```

#### 注意

上述语句中的 `password` 需要填写密码的原始值，而非 sha1 后的值。

  上一篇 下一篇 ![有帮助](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) 咨询热线
