OceanBase 常用命令入门

上篇博客我们聊了 OceanBase 是什么。这篇进入实操 ------ 把日常使用中最常用的命令整理出来,逐条解释每个参数的作用。适合刚接触 OceanBase、想快速上手的开发者和运维同学。

OceanBase 兼容 MySQL 和 Oracle 两种语法模式,很多基础 SQL(如 CREATE DATABASECREATE TABLESELECT)和 MySQL 用法一致,本文不再赘述,重点讲 OceanBase 特有的命令:连接工具、资源管理、租户管理,以及常用运维命令。

一、用 OBClient 连接 OceanBase

OBClient 是 OceanBase 的官方命令行客户端,用法和 MySQL 的 mysql 命令非常相似。

基本连接命令

复制代码
obclient -h 127.0.0.1 -P 2881 -u root@sys -p -D test
参数 说明
-h (host) 目标主机 IP 地址,默认 127.0.0.1。生产环境通常填 OBProxy 的地址
-P (port) 连接端口号,默认 2881。通过 OBProxy 连接时一般是 2881,直连 OBServer 时是 2881(SQL 端口)
-u (user) 登录用户名,格式为 用户名@租户名root@sys 表示用 sys 租户的 root 用户登录。也可以写成 租户名:用户名 格式
-p (password) 密码。直接写 -p 回车后交互式输入更安全;-p'xxx' 则直接跟密码
-D (database) 连接后默认使用的数据库

其他常用 OBClient 选项

选项 作用
-A / --no-auto-rehash 不自动补全表名 / 列名信息,启动更快
-B / --batch 批处理模式,用制表符分隔列,适合脚本处理输出
-e / --execute=SQL 执行指定 SQL 后直接退出,不进入交互模式
-E / --vertical 垂直显示查询结果,适合列很多的场景
-t / --table 以表格格式显示输出
--safe-updates 安全模式,防止 DELETE / UPDATE 不带 WHERE 误删全表
-V / --version 输出版本号并退出

连接示例:执行 SQL 后退出

复制代码
obclient -h 127.0.0.1 -P 2881 -u root@sys -p -e "SHOW TENANTS"

-e 后跟一条 SQL,执行完直接返回结果并退出,非常适合写脚本。

二、资源管理:创建资源单元、资源池、租户

OceanBase 的多租户体系是三层结构:资源单元(Unit) → 资源池(Pool) → 租户(Tenant)。创建租户前必须先建好 Unit 和 Pool。这些操作只能在 sys 租户下执行。

1. CREATE RESOURCE UNIT --- 创建资源单元

资源单元定义了 CPU、内存、I/O 等硬件资源的规格,是分配给租户的最小资源单位。

复制代码
CREATE RESOURCE UNIT unit1
  MAX_CPU = 1,
  MIN_CPU = 1,
  MAX_MEMORY = '1G',
  MIN_MEMORY = '1G',
  MAX_IOPS = 128,
  MIN_IOPS = 128,
  MAX_DISK_SIZE = '10G',
  MAX_SESSION_NUM = 64;
参数 说明
unit_name 资源单元名称,自定义
MIN_CPU CPU 规格下限(单位:Core),最小值 1。所有租户的 MIN_CPU 总和不能超过物理 CPU 总数
MAX_CPU CPU 规格上限。如果不指定 MIN_CPU,默认等于 MAX_CPU
MIN_MEMORY 内存下限,最小 1G(1073741824 字节)
MAX_MEMORY 内存上限
MIN_IOPS IOPS 下限,最小 128
MAX_IOPS IOPS 上限,不指定时默认等于 MIN_IOPS
MAX_DISK_SIZE 最大磁盘空间。内存型参数可用 '1G' 这样的字符串
MIN_SESSION_NUM 最小会话数
MAX_SESSION_NUM 最大会话数

小贴士:MIN/MAX 的区别在于,MIN 是保底保障,MAX 是上限。当资源空闲时租户可以使用到 MAX,资源紧张时至少保证 MIN。

2. CREATE RESOURCE POOL --- 创建资源池

资源池将 Unit 规格与具体的 Zone(可用区)关联起来,是 Unit 的集合。

复制代码
CREATE RESOURCE POOL pool1
  UNIT = 'unit1',
  UNIT_NUM = 1,
  ZONE_LIST = ('zone1', 'zone2', 'zone3');
参数 说明
pool_name 资源池名称,自定义
UNIT 绑定的资源单元规格名(上一步创建的 unit_name)
UNIT_NUM 每个 Zone 下创建的 Unit 个数。同一个资源池的 Unit 不能分配到同一台 Server,所以 UNIT_NUM 不能超过单 Zone 内 Server 数量
ZONE_LIST 资源池分布在哪些 Zone 上。多 Zone 部署时填写,格式为逗号分隔的 Zone 名列表

3. CREATE TENANT --- 创建租户

租户是 OceanBase 中资源隔离和权限隔离的基本单位,类似于一个 "虚拟数据库实例"。

复制代码
CREATE TENANT IF NOT EXISTS test_tenant
  PRIMARY_ZONE = 'zone1;zone2,zone3',
  RESOURCE_POOL_LIST = ('pool1'),
  CHARSET = 'utf8mb4'
  SET ob_tcp_invited_nodes = '%';
参数 说明
tenant_name 租户名,最长 63 字节,只能含字母、数字、下划线,以字母或下划线开头
IF NOT EXISTS 如果租户已存在不报错(可选)
PRIMARY_ZONE 指定主 Zone,即 leader 副本优先分布的 Zone。RANDOM 表示所有 Zone 优先级相同。zone1;zone2,zone3 中分号表示优先级分组,逗号表示同组内等优
RESOURCE_POOL_LIST 分配给租户的资源池列表,必填。多个资源池的 UNIT_NUM 要一致,ZONE_LIST 不能有交集
LOCALITY 副本在 Zone 间的分布,例如 F@z1,F@z2,F@z3 表示 z1/z2/z3 各一个全功能副本
ENABLE_ARBITRATION_SERVICE 是否开启仲裁服务,默认 False
CHARACTER SET / CHARSET 租户字符集
COLLATE 字符序(仅 MySQL 模式生效)
READ ONLY / READ WRITE 租户属性,默认读写
SET 设置租户级系统变量,常用的有 ob_compatibility_mode(设为 mysqloracle,默认 MySQL)、ob_tcp_invited_nodes(白名单,% 表示允许所有 IP)
COMMENT 备注信息(可选)

创建 Oracle 兼容模式租户

复制代码
CREATE TENANT tenant1
  PRIMARY_ZONE = 'zone1',
  RESOURCE_POOL_LIST = ('pool1')
  SET ob_compatibility_mode = 'oracle', ob_tcp_invited_nodes = '%';

关键区别是通过 ob_compatibility_mode = 'oracle' 指定 Oracle 兼容模式。租户创建后模式不可更改

三、数据库与用户管理

连入业务租户后,日常操作和 MySQL 基本一致。

创建数据库

复制代码
CREATE DATABASE IF NOT EXISTS mydb DEFAULT CHARACTER SET utf8mb4;
参数 说明
database_name 数据库名
IF NOT EXISTS 已存在时不报错
DEFAULT CHARACTER SET 默认字符集

创建用户

复制代码
CREATE USER 'appuser'@'%' IDENTIFIED BY 'YourPassword123';
参数 说明
username 用户名
host 允许连接的主机,% 表示任意 IP
IDENTIFIED BY 设置密码

授予权限

复制代码
GRANT SELECT, INSERT, UPDATE, DELETE ON mydb.* TO 'appuser'@'%';
参数 说明
priv_type 权限类型,如 SELECTINSERTALL PRIVILEGES
db.* 作用域,mydb.* 表示 mydb 库的所有表,*.* 表示全局
TO 目标用户

修改数据库只读状态

复制代码
ALTER DATABASE mydb SET READ ONLY;
ALTER DATABASE mydb SET READ WRITE;

在维护窗口将数据库设为只读,防止误写。

四、常用运维命令

以下命令在 sys 租户或业务租户中执行,用于集群和租户的日常运维。

集群节点管理

复制代码
-- 新增 OBServer 节点
ALTER SYSTEM ADD server '192.168.1.10:2882' zone 'zone1';
-- 删除节点
ALTER SYSTEM DELETE server '192.168.1.10:2882';
-- 停止/启动节点
ALTER SYSTEM STOP server '192.168.1.10:2882';
ALTER SYSTEM START server '192.168.1.10:2882';
参数 说明
svr_ip:svr_port OBServer 的 IP 和 RPC 端口(默认 2882)
zone_name 节点所属的 Zone

Zone 管理

复制代码
-- 新增 Zone
ALTER SYSTEM ADD zone 'zone1' region 'default_region';
-- 设置 Zone 的机房信息
ALTER SYSTEM ALTER zone 'zone1' set idc = 'idc1';
-- 删除/下线/上线 Zone
ALTER SYSTEM DELETE zone 'zone1';
ALTER SYSTEM STOP zone 'zone1';
ALTER SYSTEM START zone 'zone1';
参数 说明
zone_name Zone 名称
region_name Region(地域)名称,一个 Region 可包含多个 Zone
idc 机房标识

租户管理

复制代码
-- 查看所有租户
SHOW TENANTS;
-- 锁定/解锁租户(锁定后租户无法登录)
ALTER TENANT test_tenant LOCK;
ALTER TENANT test_tenant UNLOCK;
-- 修改租户主 Zone
ALTER TENANT test_tenant PRIMARY_ZONE = 'zone2';
-- 修改租户白名单
ALTER TENANT test_tenant SET VARIABLES ob_tcp_invited_nodes = '%';
-- 删除租户
DROP TENANT IF EXISTS test_tenant;

参数管理

复制代码
-- 查看集群级配置项
SHOW PARAMETERS WHERE scope = 'cluster';
-- 查看租户级配置项
SHOW PARAMETERS WHERE scope = 'TENANT';
-- 设置集群配置项
ALTER SYSTEM SET memory_limit = '80%';
-- 针对特定租户设置
ALTER SYSTEM SET memory_limit = '80%' TENANT = 'test_tenant';
参数 说明
scope 配置项作用域,cluster 为集群级,TENANT 为租户级
name 配置项名称,支持 LIKE 模糊查询
ZONE 指定在哪个 Zone 生效
SERVER 指定在哪台 Server 生效
TENANT 指定对哪个租户生效

合并管理

OceanBase 使用 LSM‑Tree 存储引擎,数据写入 memtable 后异步转储和合并到磁盘。

复制代码
-- 在业务租户中执行租户级合并
ALTER SYSTEM MAJOR FREEZE;
-- 在 sys 租户中对指定租户执行合并
ALTER SYSTEM MAJOR FREEZE TENANT = 'test_tenant';
-- 清理合并失败状态
ALTER SYSTEM CLEAR MERGE ERROR TENANT = 'test_tenant';

会话诊断

复制代码
-- 查看当前活跃会话
SHOW PROCESSLIST;
-- 终止会话
KILL 12345;
-- 只终止当前查询,不断开会话
KILL QUERY 12345;
参数 说明
session_id 会话 ID,通过 SHOW PROCESSLIST 获取

备份恢复

复制代码
-- 设置数据备份路径
ALTER SYSTEM SET data_backup_dest = '/backup/data' TENANT = 'test_tenant';
-- 设置日志归档路径
ALTER SYSTEM SET log_archive_dest = '/backup/log' TENANT = 'test_tenant';
-- 启动全量备份
ALTER SYSTEM BACKUP DATABASE;
-- 启动增量备份
ALTER SYSTEM BACKUP INCREMENTAL DATABASE;
-- 启动/停止日志归档
ALTER SYSTEM ARCHIVELOG;
ALTER SYSTEM NOARCHIVELOG;

五、速查表

场景 命令
连接数据库 obclient -h IP -P 2881 -u root@sys -p
创建资源单元 CREATE RESOURCE UNIT unit1 MAX_CPU=1, MAX_MEMORY='1G'...
创建资源池 CREATE RESOURCE POOL pool1 UNIT='unit1', UNIT_NUM=1, ZONE_LIST=('zone1')
创建 MySQL 租户 CREATE TENANT t1 PRIMARY_ZONE='zone1', RESOURCE_POOL_LIST=('pool1') SET ob_tcp_invited_nodes='%'
创建 Oracle 租户 同上,加 SET ob_compatibility_mode='oracle'
查看租户 SHOW TENANTS
查看配置项 SHOW PARAMETERS WHERE scope='cluster'
执行合并 ALTER SYSTEM MAJOR FREEZE
终止会话 KILL session_id
启动备份 ALTER SYSTEM BACKUP DATABASE

小结

OceanBase 的命令体系对 MySQL 用户非常友好 ------ 基础的库表操作几乎零学习成本。真正需要理解的是它的多租户资源管理模型(Unit → Pool → Tenant)和 ALTER SYSTEM 系列运维命令。掌握本文这些命令,日常的连接、建租户、建库建用户、基础运维就够用了。

如果是生产环境,更推荐用 OCP(OceanBase Cloud Platform)这个图形化运维平台来做集群和租户管理,命令行则适合自动化脚本和快速排查问题。

参数说明和语法主要参考自 OceanBase 官方文档,不同版本细节可能有差异,实际使用时建议对照你所用的版本查阅对应文档。

相关推荐
OceanBase数据库官方博客5 小时前
OceanBase:从核心系统现代化到AI 创新
人工智能·oceanbase
spencer_tseng19 小时前
[OceanBase-Desktop-Setup-1.0.0.exe] CPU virtualization is not enabled
oceanbase·cpu·virtualization
spencer_tseng3 天前
Oceanbase [-4013 alloc buf failed] & [-4388 OBServer]
oceanbase·-4013·-4388
数智前线5 天前
OceanBase,走向中国版Databricks
oceanbase
OceanBase数据库官方博客5 天前
OceanBase 联合华信永道攻坚“智慧公积金”升级(技术解析与实践)
oceanbase
marvelyu6 天前
每天10分钟学会OceanBase系列(Day 21):OceanBase安全加固实战——给数据库穿上防弹衣
数据库·oceanbase
OceanBase数据库官方博客7 天前
OceanBase Harness Engineering?AI 产品真正的瓶(技术解析与实践)
大数据·人工智能·oceanbase
丶意冷9 天前
OceanBase 双模式识别与 MyBatis-Plus 分页方言自动切换实战
mybatis·oceanbase
隔窗听雨眠9 天前
OceanBase接入DeepSeek:数据库与AI的深度融合如何改写企业数据规则
数据库·人工智能·oceanbase