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 官方文档,不同版本细节可能有差异,实际使用时建议对照你所用的版本查阅对应文档。

相关推荐
yzs875 天前
OceanBase的向量化引擎shuffle有多强?
oceanbase
小码过河.6 天前
oceanbase表分区变更流程(从8到10)
oceanbase
小码过河.6 天前
oceanbase中zone和observer、分区表之间关系
前端·数据库·oceanbase
小码过河.6 天前
oceanbase根据时间自动新增表分区
oceanbase
小码过河.6 天前
oceanbase表分区指定
oceanbase
喂自己代言7 天前
从 0.7 秒到 11 毫秒:OceanBase 一条慢 SQL 的三连坑优化实战
数据库·sql·oceanbase
marvelyu9 天前
OceanBase 调优实战:从慢查询到高并发的系统性优化
oceanbase
2601_9620715715 天前
基于DataX迁移MySQL到OceanBase集群
数据库·mysql·oceanbase
光锥智能17 天前
OceanBase领跑数字政府数据库选型:产品能力、市场潜力、技术潜力均居首
数据库·人工智能·oceanbase
数智前线18 天前
服务22个省数字政府建设,OceanBase领跑数字政府数据库选型
oceanbase