Skip to content

OceanBase 常用命令

集群管理命令

OceanBase 集群管理命令用于监控和维护集群的运行状态,包括查看集群信息、资源使用情况、节点管理和配置修改等。

集群状态查询

通过以下命令可以查看 OceanBase 集群的整体状态、版本信息和节点详情。

查看集群整体状态

sql
-- 查看集群状态,返回集群的基本信息和健康状态
SHOW CLUSTER STATUS;

-- 查看集群版本信息,包括版本号、编译时间等
SELECT * FROM oceanbase.GV$OB_VERSION;

-- 查看集群所有节点信息,包括IP、状态、所属Zone等
SELECT * FROM oceanbase.GV$OB_SERVERS;

查看集群资源使用情况

sql
-- 查看指定Zone(如zone1)的CPU使用情况
SELECT * FROM oceanbase.GV$OB_SERVERS WHERE zone = 'zone1';

-- 查看集群内存使用情况,将内存转换为GB单位
SELECT svr_ip, mem_total/1024/1024/1024 AS mem_total_gb, mem_used/1024/1024/1024 AS mem_used_gb 
FROM oceanbase.GV$OB_SERVERS;

-- 查看集群磁盘使用情况,将磁盘转换为GB单位
SELECT svr_ip, disk_total/1024/1024/1024 AS disk_total_gb, disk_used/1024/1024/1024 AS disk_used_gb 
FROM oceanbase.GV$OB_SERVERS;

集群维护命令

用于集群节点的添加、删除、重启、停止以及集群配置的查看和修改。

节点管理命令

sql
-- 添加新节点到指定Zone
-- <new-server-ip>: 新节点的IP地址
-- <rpc-port>: 新节点的RPC端口
-- <zone-name>: 新节点所属的Zone名称
ALTER SYSTEM ADD SERVER '<new-server-ip>:<rpc-port>' ZONE '<zone-name>';

-- 从集群中删除节点
-- <server-ip>: 要删除的节点IP
-- <rpc-port>: 要删除的节点RPC端口
ALTER SYSTEM DELETE SERVER '<server-ip>:<rpc-port>';

-- 重启指定节点
ALTER SYSTEM RESTART SERVER '<server-ip>:<rpc-port>';

-- 停止指定节点
ALTER SYSTEM STOP SERVER '<server-ip>:<rpc-port>';

集群配置命令

sql
-- 查看集群级别的配置参数,过滤包含'cluster'的参数
SHOW PARAMETERS LIKE '%cluster%' SCOPE = CLUSTER;

-- 修改集群级别的配置参数
-- <parameter_name>: 要修改的参数名
-- <value>: 新的参数值
ALTER SYSTEM SET <parameter_name> = <value> SCOPE = CLUSTER;

-- 查看节点级别的内存相关配置
SHOW PARAMETERS LIKE '%memory_limit%' SCOPE = SERVER;

-- 修改指定节点的配置参数
ALTER SYSTEM SET <parameter_name> = <value> SCOPE = SERVER WHERE server = '<server-ip>:<rpc-port>';

租户管理命令

OceanBase 是多租户架构,租户管理命令用于创建、修改、查看和管理租户,以及管理租户的资源。

租户创建与管理

创建租户

sql
-- 创建租户,指定字符集、Zone列表、主Zone和资源池
CREATE TENANT <tenant-name>
  CHARSET = utf8mb4,  -- 字符集设置为utf8mb4,支持emoji等特殊字符
  ZONE_LIST = ('zone1', 'zone2', 'zone3'),  -- 租户分布的Zone列表
  PRIMARY_ZONE = 'zone1,zone2,zone3',  -- 租户主Zone设置
  RESOURCE_POOL_LIST = ('<resource-pool-name>');  -- 租户使用的资源池

-- 查看所有租户列表
SELECT * FROM oceanbase.DBA_OB_TENANTS;

-- 查看租户状态,只显示租户ID、名称和状态
SELECT tenant_id, tenant_name, status FROM oceanbase.GV$OB_TENANTS;

修改租户

sql
-- 为租户添加新的资源池
ALTER TENANT <tenant-name> RESOURCE_POOL_LIST ADD ('<new-resource-pool-name>');

-- 修改租户主可用区设置
ALTER TENANT <tenant-name> SET PRIMARY_ZONE = '<new-primary-zone>';

-- 停止指定租户
ALTER SYSTEM STOP TENANT <tenant-name>;

-- 启动指定租户
ALTER SYSTEM START TENANT <tenant-name>;

租户资源管理

资源管理是 OceanBase 多租户架构的核心,包括资源单元和资源池的创建与管理。

资源池管理

sql
-- 创建资源单元,定义CPU、内存、IOPS等资源限制
CREATE RESOURCE UNIT <unit-name>
  MAX_CPU = 8,  -- 最大CPU核数
  MIN_CPU = 8,  -- 最小CPU核数
  MEMORY_SIZE = '64G',  -- 内存大小
  MAX_IOPS = 10000,  -- 最大IOPS
  MIN_IOPS = 10000,  -- 最小IOPS
  IOPS_WEIGHT = 1,  -- IOPS权重
  LOG_DISK_SIZE = '128G';  -- 日志磁盘大小

-- 创建资源池,关联资源单元和Zone
CREATE RESOURCE POOL <pool-name>
  UNIT = '<unit-name>',  -- 关联的资源单元
  UNIT_NUM = 3,  -- 每个Zone中的资源单元数量
  ZONE_LIST = ('zone1', 'zone2', 'zone3');  -- 资源池分布的Zone列表

-- 查看所有资源池信息
SELECT * FROM oceanbase.DBA_OB_RESOURCE_POOLS;

备份恢复命令

备份恢复是数据库运维的重要组成部分,OceanBase 提供了全面的备份恢复命令,支持全量备份、增量备份和点-in-time恢复等功能。

备份管理

全量备份

sql
-- 创建指定数据库的全量备份
BACKUP DATABASE <database-name>;

-- 创建指定租户的全量备份
BACKUP TENANT <tenant-name>;

-- 查看所有备份任务的执行情况
SELECT * FROM oceanbase.GV$OB_BACKUP_TASKS;

-- 查看所有备份集的信息
SELECT * FROM oceanbase.GV$OB_BACKUP_SETS;

增量备份

sql
-- 创建指定数据库的增量备份,基于最新的全量备份
BACKUP DATABASE <database-name> INCREMENTAL FROM LATEST FULL;

-- 创建指定租户的增量备份,基于最新的全量备份
BACKUP TENANT <tenant-name> INCREMENTAL FROM LATEST FULL;

恢复管理

全量恢复

sql
-- 从指定备份路径恢复数据库
RESTORE DATABASE <database-name> FROM '<backup-path>';

-- 从指定备份路径恢复租户
RESTORE TENANT <tenant-name> FROM '<backup-path>';

点-in-time恢复

sql
-- 恢复数据库到指定时间点
RESTORE DATABASE <database-name> FROM '<backup-path>' UNTIL TIMESTAMP '2023-10-01 12:00:00';

-- 恢复租户到指定时间点
RESTORE TENANT <tenant-name> FROM '<backup-path>' UNTIL TIMESTAMP '2023-10-01 12:00:00';

监控诊断命令

监控诊断命令用于实时监控 OceanBase 集群的性能状态、诊断问题和排查故障,包括会话监控、慢查询监控、集群诊断和节点诊断等。

性能监控

会话与连接监控

sql
-- 查看活跃会话,排除Sleep状态的会话
SELECT * FROM oceanbase.GV$OB_PROCESSLIST WHERE command != 'Sleep';

-- 查看会话等待事件,了解会话正在等待什么资源
SELECT * FROM oceanbase.GV$OB_SESSION_WAIT; 

-- 查看连接统计信息,了解连接的来源和数量
SELECT * FROM oceanbase.GV$OB_CONNECTION_STATISTICS;

慢查询监控

sql
-- 查看慢查询日志,按请求时间倒序排列
SELECT * FROM oceanbase.GV$OB_SLOW_QUERY ORDER BY request_time DESC;

-- 查看慢查询统计信息,了解慢查询的分布和趋势
SELECT * FROM oceanbase.GV$OB_SLOW_QUERY_STATISTICS;

诊断命令

集群诊断

sql
-- 查看集群事件,了解集群中发生的重要事件
SELECT * FROM oceanbase.GV$OB_EVENTS ORDER BY event_time DESC;

-- 查看集群错误日志,了解集群中发生的错误
SELECT * FROM oceanbase.GV$OB_ERRORS ORDER BY error_time DESC;

-- 查看异常的分区副本,找出状态不正常的副本
SELECT * FROM oceanbase.GV$OB_PARTITION_REPLICA WHERE status != 'NORMAL';

节点诊断

sql
-- 查看节点负载情况,了解每个节点的负载水平
SELECT * FROM oceanbase.GV$OB_SERVER_LOAD;

-- 查看节点内存使用情况,了解内存的分配和使用
SELECT * FROM oceanbase.GV$OB_MEMORY_USAGE;

-- 查看节点IO统计信息,了解磁盘IO的使用情况
SELECT * FROM oceanbase.GV$OB_IO_STAT;

数据管理命令

数据管理命令用于创建和管理数据库对象(如表、索引)以及对数据进行增删改查操作。

表与索引管理

创建与管理表

sql
-- 创建表,包括列定义和分区设置
CREATE TABLE <table-name> (
  <column1> <data-type> PRIMARY KEY,  -- 主键列
  <column2> <data-type>,  -- 普通列
  ...
) PARTITION BY <partition-type> (...) 
  PARTITIONS <num>;  -- 分区数

-- 查看指定数据库中的表列表
SELECT * FROM information_schema.TABLES WHERE table_schema = '<database-name>';

-- 修改表结构,添加新列
ALTER TABLE <table-name> ADD COLUMN <column-name> <data-type>;

-- 删除表
DROP TABLE <table-name>;

索引管理

sql
-- 创建索引,提高查询性能
CREATE INDEX <index-name> ON <table-name> (<column1>, <column2>, ...);

-- 查看指定表的索引信息
SELECT * FROM information_schema.STATISTICS WHERE table_schema = '<database-name>' AND table_name = '<table-name>';

-- 删除索引
DROP INDEX <index-name> ON <table-name>;

数据操作命令

数据查询

sql
-- 基本查询,查询表中满足条件的所有列
SELECT * FROM <table-name> WHERE <condition>;

-- 聚合查询,计算行数和平均值,并按指定列分组
SELECT COUNT(*), AVG(<column-name>) FROM <table-name> GROUP BY <group-column>;

-- 连接查询,连接两个表并查询相关数据
SELECT * FROM <table1> JOIN <table2> ON <table1>.<column> = <table2>.<column>;

数据修改

sql
-- 插入数据,向表中插入一行或多行数据
INSERT INTO <table-name> (<column1>, <column2>, ...) VALUES (<value1>, <value2>, ...);

-- 更新数据,修改表中满足条件的行
UPDATE <table-name> SET <column1> = <value1>, <column2> = <value2> WHERE <condition>;

-- 删除数据,删除表中满足条件的行
DELETE FROM <table-name> WHERE <condition>;

权限管理命令

权限管理命令用于创建和管理用户、角色,以及授予和回收权限,确保数据库的安全性和访问控制。

用户与角色管理

用户管理

sql
-- 创建用户并设置密码
CREATE USER <user-name> IDENTIFIED BY '<password>';

-- 查看所有用户列表
SELECT * FROM mysql.user;

-- 修改用户密码
ALTER USER <user-name> IDENTIFIED BY '<new-password>';

-- 删除用户
DROP USER <user-name>;

角色管理

sql
-- 创建角色
CREATE ROLE <role-name>;

-- 授予角色对指定表的SELECT和INSERT权限
GRANT SELECT, INSERT ON <database-name>.<table-name> TO <role-name>;

-- 将角色授予给用户
GRANT <role-name> TO <user-name>;

-- 在当前会话中激活角色
SET ROLE <role-name>;

权限授予与回收

授予权限

sql
-- 授予用户对指定数据库的所有权限
GRANT ALL PRIVILEGES ON <database-name>.* TO <user-name>;

-- 授予用户对指定表的SELECT、INSERT、UPDATE、DELETE权限
GRANT SELECT, INSERT, UPDATE, DELETE ON <database-name>.<table-name> TO <user-name>;

-- 授予用户系统级权限,如CREATE USER和RELOAD
GRANT CREATE USER, RELOAD ON *.* TO <user-name>;

回收权限

sql
-- 回收用户对指定数据库的所有权限
REVOKE ALL PRIVILEGES ON <database-name>.* FROM <user-name>;

-- 回收用户对指定表的DELETE权限
REVOKE DELETE ON <database-name>.<table-name> FROM <user-name>;

-- 回收用户的RELOAD系统权限
REVOKE RELOAD ON *.* FROM <user-name>;

常见问题(FAQ)

Q1: 如何快速查看集群的整体健康状态?

A1: 使用以下命令快速查看集群健康状态:

sql
-- 查看集群状态
SHOW CLUSTER STATUS;

-- 查看节点状态
SELECT svr_ip, status, zone FROM oceanbase.GV$OB_SERVERS;

-- 查看分区副本异常
SELECT * FROM oceanbase.GV$OB_PARTITION_REPLICA WHERE status != 'NORMAL';

Q2: 如何查看租户的资源使用情况?

A2: 使用以下命令查看租户资源使用情况:

sql
-- 查看租户CPU使用情况
SELECT * FROM oceanbase.GV$OB_TENANT_STAT;

-- 查看租户内存使用情况
SELECT * FROM oceanbase.GV$OB_TENANT_MEMORY_USAGE;

-- 查看租户IO使用情况
SELECT * FROM oceanbase.GV$OB_TENANT_IO_STAT;

Q3: 如何诊断慢查询问题?

A3: 使用以下命令诊断慢查询问题:

sql
-- 查看慢查询日志
SELECT * FROM oceanbase.GV$OB_SLOW_QUERY ORDER BY request_time DESC LIMIT 10;

-- 查看慢查询统计
SELECT query_sql, count(*) as exec_count, avg(request_time) as avg_time 
FROM oceanbase.GV$OB_SLOW_QUERY 
GROUP BY query_sql 
ORDER BY avg_time DESC LIMIT 10;

-- 查看当前执行的慢查询
SELECT * FROM oceanbase.GV$OB_PROCESSLIST WHERE command != 'Sleep' AND time > 10;

Q4: 如何备份和恢复单个表?

A4: 使用以下命令备份和恢复单个表:

sql
-- 备份单个表
BACKUP TABLE <database-name>.<table-name>;

-- 恢复单个表
RESTORE TABLE <database-name>.<table-name> FROM '<backup-path>';

Q5: 如何查看和修改OceanBase的配置参数?

A5: 使用以下命令查看和修改配置参数:

sql
-- 查看所有配置参数
SHOW PARAMETERS;

-- 查看特定配置参数
SHOW PARAMETERS LIKE '%memory_limit%';

-- 修改集群配置参数
ALTER SYSTEM SET <parameter_name> = <value> SCOPE = CLUSTER;

-- 修改节点配置参数
ALTER SYSTEM SET <parameter_name> = <value> SCOPE = SERVER WHERE server = '<server-ip>:<rpc-port>';