快速体验 OceanBase 社区版
1. 背景信息
OceanBase 是由蚂蚁集团开发的一款高性能、高可用、分布式关系数据库。自 V4.0.0 版本起,OceanBase 提供了统一的安装包(All-in-One Package),用户可以通过该安装包一次性完成 obd、OceanBase 数据库、ODP、OBAgent、Grafana、Prometheus 的安装。从 V4.1.0 起,All-in-One Package 新增支持安装 OCP Express。用户可根据实际需求选择部分或全部组件进行安装。
1.1 组件介绍
obd (OceanBase Deployer)
OceanBase 安装部署工具,简称为 obd。它简化了 OceanBase 的安装与部署过程。详细信息请参考 OceanBase 安装部署工具文档.ODP (OceanBase Database Proxy)
OceanBase 数据库代理,是 OceanBase 数据库专用的代理服务器,简称为 ODP(又称为 OBProxy)。ODP 提供了负载均衡和高可用性支持。详细信息请参考 OceanBase 数据库代理文档.OCP Express
基于 Web 的 OceanBase 数据库 4.x 管理工具,集成在 OceanBase 数据库集群中,支持关键性能指标监控及基本数据库管理功能。详细信息请参考 OceanBase 云平台 Express (OCP Express).OBAgent
OceanBase 数据库监控采集框架,支持推送和拉取两种数据采集模式,适用于不同的应用场景。Grafana
开源的数据可视化工具,可将各种指标数据进行可视化展示,帮助直观了解系统运行状态和性能指标。详细信息可参见 Grafana 官网.Prometheus
开源的服务监控系统和时序数据库,提供通用的数据模型以及高效的数据采集、存储和查询接口。详细信息可参见 Prometheus 官网.
1.2 方案介绍
为了助力用户快速上手体验 OceanBase 数据库,提供了以下三种不同的部署方案。用户可根据自身的环境和需求灵活选择:
方案一:部署 OceanBase 演示环境
适用于仅有一台机器的情况,快速搭建一个可用的 OceanBase 数据库环境。该环境具备数据库的基本功能,适合初步了解 OceanBase 数据库,但不具备分布式能力及高可用特性,不建议长期使用。具体操作步骤请参考 方案一:部署 OceanBase 演示环境。方案二:部署 OceanBase 集群环境
适用于需要深入了解 OceanBase 分布式数据库架构及功能特性的用户。该集群环境具备数据库的完整能力及分布式高可用特性。需要至少准备三台配置为 4vCPU、10 GB 内存、50 GB 磁盘的主机。具体操作步骤请参考 方案二:部署 OceanBase 集群环境。方案三:部署 OceanBase 容器环境
适用于希望通过容器化方式部署和管理 OceanBase 数据库的用户。该方案未经过大规模验证,建议谨慎使用。操作步骤请参考 方案三:部署 OceanBase 容器环境。
2. 部署 OceanBase 演示环境
当仅拥有一台可用机器时,可参考以下步骤使用 obd demo
命令快速部署单机 OceanBase 数据库。
步骤一:下载并安装 All-in-One 安装包
下载安装包
从 OceanBase 软件下载中心 下载最新版本的 All-in-One 安装包,并将其上传到目标机器的任一目录下。解压并安装
在安装包所在目录下执行以下命令进行解压和安装:tar -xzf oceanbase-all-in-one-*.tar.gz cd oceanbase-all-in-one/bin/ ./install.sh source ~/.oceanbase-all-in-one/bin/env.sh
步骤二:单机部署 OceanBase 数据库
执行以下命令,快速部署 OceanBase 数据库:
obd demo
obd demo
命令将在当前用户的家目录下以最小规格部署并启动 OceanBase 数据库及相关组件(包括 ODP、OBAgent、Grafana 和 Prometheus),默认部署名为 demo
。如需更多定制化的部署形式,请参见 快速部署命令.
您也可以使用 obd
命令管理该 OceanBase 数据库,详细命令介绍请参考 集群命令组.
注意事项:
安装 Grafana 或 Prometheus 时,系统会输出其访问地址。在阿里云或其他云环境下,可能因无法获取公网 IP 而输出内网地址,此 IP 非公网地址,需使用正确的地址进行访问。
obd demo
命令成功执行后,会输出通过OBClient
连接 OceanBase 数据库的命令示例:通过 2881 端口直连数据库
obclient -h127.0.0.1 -P2881 -uroot@sys -Doceanbase -A
通过 ODP 代理访问数据库
obclient -h127.0.0.1 -P2883 -uroot@sys -Doceanbase -A
使用
OBClient
客户端连接 OceanBase 集群的详细操作可参见 通过 OBClient 连接 OceanBase 租户.
可选:配置密码
在使用 obd demo
快速部署 OceanBase 数据库后,可参考以下步骤为 demo
集群配置密码:
修改配置文件
执行以下命令打开配置文件:
obd cluster edit-config demo
在配置文件中
oceanbase-ce
组件下添加root_password: xxxx
,示例如下:oceanbase-ce: servers: - 127.0.0.1 global: home_path: /home/admin/oceanbase-ce # 省略部分配置项 log_disk_size: 13G root_password: ******
重启集群
修改并保存配置文件后,
obd
会输出待执行的重启命令,直接复制执行即可:obd cluster reload demo
或根据输出提示执行对应命令。您也可以查看详细的
obd
日志以获取更多信息:obd display-trace <Trace ID>
3. 部署 OceanBase 容器环境
通过 Docker 容器部署 OceanBase 数据库,帮助用户快速了解 OceanBase 数据库。
步骤一(可选):拉取 OceanBase 数据库镜像
运行以下命令,拉取 OceanBase 数据库所需的 Docker 镜像:
搜索 OceanBase 数据库相关镜像
sudo docker search oceanbase
拉取最新镜像
sudo docker pull oceanbase/oceanbase-ce
说明:
若拉取 Docker 镜像失败,可从 quay.io 或 ghcr.io 仓库中拉取镜像,只需将上述拉取命令中的oceanbase/oceanbase-ce
替换为quay.io/oceanbase/oceanbase-ce
或ghcr.io/oceanbase/oceanbase-ce
。例如:sudo docker pull quay.io/oceanbase/oceanbase-ce
确保步骤二中的镜像仓库地址与步骤一保持一致。
步骤二:启动 OceanBase 数据库实例
运行以下命令,启动 OceanBase 数据库实例:
根据当前容器部署最大规格实例
sudo docker run -p 2881:2881 --name obstandalone -e MODE=normal -e OB_TENANT_PASSWORD=***** -d oceanbase/oceanbase-ce
部署 mini 的独立实例
sudo docker run -d -p 2881:2881 --name obstandalone -e MODE=mini -e OB_TENANT_PASSWORD=123456 oceanbase/oceanbase-ce
参数说明:
--name
:设置 Docker 容器名称,例如obstandalone
。-e
:设置环境变量,其中MODE
用于设置 OceanBase 数据库的部署规格,OB_TENANT_PASSWORD
用于设置root@test
用户密码。
启动预计需要 2~5 分钟。 可通过以下命令查看启动状态:
sudo docker logs -f obstandalone
或
sudo docker logs obstandalone | tail -1
输出 boot success!
表示启动成功。
步骤三:连接 OceanBase 数据库实例
OceanBase-CE 镜像内置了 obd
(OceanBase Deployer)和 OBClient
(OceanBase 命令行客户端)。用户可选择以下方式进行连接:
进入容器后连接
sudo docker exec -it obstandalone bash
进入容器后,可使用
obd
管理和OBClient
连接实例:查看集群列表:
obd cluster list
查看集群详情:
obd cluster display obcluster
连接集群:
obclient -h127.0.0.1 -uroot -A -Doceanbase -P2881 -p
使用宿主机本地客户端连接
可使用宿主机本地的
OBClient
或 MySQL 客户端连接到 OceanBase 数据库实例:obclient -h172.17.0.2 -P2881 -uroot -Doceanbase -A
连接成功后,终端将显示类似如下内容:
Welcome to the OceanBase. Commands end with ; or \g. Your OceanBase connection id is 3221711319 Server version: OceanBase_CE 4.3.0.1 (r100000242024032211-0193a343bc60b4699ec47792c3fc4ce166a182f9) (Built Mar 22 2024 13:19:48) Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. obclient [(none)]>
4. OceanBase 数据库基本操作
4.1 创建数据库和用户
在连接到 OceanBase 数据库后,可以执行以下 SQL 命令创建数据库和用户:
CREATE DATABASE robot;
CREATE USER robot IDENTIFIED BY 'robot_123456';
GRANT ALL ON robot.* TO robot@'%' IDENTIFIED BY 'robot_123456';
FLUSH PRIVILEGES;
USE robot;
4.2 远程连接
使用以下命令进行远程连接:
obclient -h172.17.0.2 -P2881 -urobot -Drobot -A -p
数据库连接串包含了访问数据库所需的参数信息。在创建应用程序前,可通过数据库连接串验证登录数据库,确保连接参数正确。
参数说明:
-h
:OceanBase 数据库连接 IP,可能是 ODP 地址。-u
:租户的连接用户名,格式为用户@租户#集群名称
。默认集群租户为sys
,默认管理员用户为root
。直接连接数据库时不需填写集群名称,通过 ODP 连接时需填写。-p
:用户密码。-P
:OceanBase 数据库连接端口,也是 ODP 的监听端口。-D
:需要访问的数据库名称。
5. Java 客户端
OceanBase-CE 社区版几乎完全兼容 MySQL,这意味着用户可以无缝迁移现有的 MySQL 应用程序到 OceanBase-CE,享受其高性能和高可用性的优势。
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
5.1 Java 客户端远程连接
以下是一个简单的 Java 示例,用于连接 OceanBase 数据库并执行基本的数据库操作:
package com.litongjava.file.example;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class OceanbaseConnectExample {
public static void main(String[] args) {
String url = "jdbc:mysql://xxxx:2881/robot?user=robot&password=robot_123456&useSSL=false";
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
try {
Connection connection = DriverManager.getConnection(url);
System.out.println(connection.getAutoCommit());
Statement sm = connection.createStatement();
// 新建表 t_meta_form
sm.executeUpdate("CREATE TABLE t_meta_form (name varchar(36), id int)");
// 插入数据
sm.executeUpdate("INSERT INTO t_meta_form VALUES ('an', '1')");
// 查询数据,并输出结果
ResultSet rs = sm.executeQuery("SELECT * FROM t_meta_form");
while (rs.next()) {
String name = rs.getString("name");
String id = rs.getString("id");
System.out.println(name + ',' + id);
}
// 删除表
sm.executeUpdate("DROP TABLE t_meta_form");
} catch (SQLException se) {
System.out.println("error!");
se.printStackTrace();
}
} catch (Exception ex) {
ex.printStackTrace();
}
}
}
5.2 Java-DB + HikariDataSource 连接
以下是使用 HikariCP 连接池与 Java-DB 结合的配置示例:
app.properties
jdbc.url=jdbc:mysql://xxxx:2881/robot?user=robot&password=robot_123456&useSSL=false
DbConfig.java
package com.litongjava.file.config;
import com.jfinal.template.Engine;
import com.jfinal.template.source.ClassPathSourceFactory;
import com.litongjava.annotation.AConfiguration;
import com.litongjava.annotation.Initialization;
import com.litongjava.constatns.ServerConfigKeys;
import com.litongjava.db.activerecord.ActiveRecordPlugin;
import com.litongjava.db.activerecord.OrderedFieldContainerFactory;
import com.litongjava.db.activerecord.dialect.MysqlDialect;
import com.litongjava.tio.boot.server.TioBootServer;
import com.litongjava.tio.utils.environment.EnvUtils;
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@AConfiguration
public class DbConfig {
@Initialization
public void config() {
// 获取数据库连接信息
String jdbcUrl = EnvUtils.getStr(ServerConfigKeys.JDBC_URL);
// 初始化 HikariCP 数据库连接池
HikariConfig config = new HikariConfig();
// 设定基本参数
config.setJdbcUrl(jdbcUrl);
HikariDataSource hikariDataSource = new HikariDataSource(config);
// 初始化 ActiveRecordPlugin
ActiveRecordPlugin arp = new ActiveRecordPlugin(hikariDataSource);
// 开发环境下启用开发模式
if (EnvUtils.isDev()) {
arp.setDevMode(true);
}
// 是否展示 SQL
boolean showSql = EnvUtils.getBoolean("jdbc.showSql", false);
log.info("show sql:{}", showSql);
arp.setShowSql(showSql);
arp.setDialect(new MysqlDialect());
arp.setContainerFactory(new OrderedFieldContainerFactory());
// 配置引擎
Engine engine = arp.getEngine();
engine.setSourceFactory(new ClassPathSourceFactory());
engine.setCompressorOn(' ');
engine.setCompressorOn('\n');
// 启动 ActiveRecordPlugin
arp.start();
// 在应用销毁时停止数据库连接池
TioBootServer.me().addDestroyMethod(() -> {
arp.stop();
hikariDataSource.close();
});
}
}
6. 参考资料
通过上述步骤,您可以快速部署并体验 OceanBase 社区版的强大功能。无论是单机环境、集群环境还是容器化部署,OceanBase 都能为您的应用提供稳定、高效的数据库支持。同时,OceanBase-CE 与 MySQL 的高度兼容性,使得现有的 MySQL 应用能够轻松迁移至 OceanBase,享受其分布式架构带来的优势。