零基础OceanBase数据库入门(4):创建MySQL模式数据库

上一篇我们完成了MySQL模式租户的创建,成功拥有了属于自己的"独立数据库实例"。接下来,我们将进入更贴近实际开发的环节------创建数据库。

数据库(Database)是租户下的"数据容器",用于隔离不同业务的数据(比如电商的"订单库"和"用户库"),和我们熟悉的MySQL数据库用法高度一致。今天就结合OceanBase官方demo和单机版文档,从零实操,完成数据库的创建、验证、授权及基础管理。

一、租户与数据库

很多新手会混淆"租户"和"数据库",这里用一句话讲透(结合单机版特性)

租户 = 独立数据库实例(有自己的资源、管理员),数据库 = 租户内的业务数据容器(归属于某个租户,受租户资源限制)。

举个例子,我们上一篇创建的mq_t1租户,就相当于一个"MySQL实例",今天要创建的数据库,就是这个"实例"里的一个个独立数据库,用于存放不同业务的数据,租户间的数据库完全隔离,互不影响。

核心要点:创建数据库必须先登录目标租户(不能用sys租户直接创建),且OceanBase MySQL模式的数据库,支持和MySQL一致的字符集、权限管理,学习成本极低。

二、前置准备:登录目标租户

延续上一篇的操作,我们先登录之前创建的mq_t1租户(如果已退出,重新执行登录命令),这是创建数据库的前提:

nginx 复制代码
# 登录mq_t1租户(密码用自己上一篇设置的,这里以123456为例)obclient -h127.0.0.1 -P2881 -uroot@mq_t1 -p'123456' -A

登录成功后,终端会显示 obclient [(none)]> ,表示已进入租户,且未切换到任何数据库,此时即可开始创建数据库。

补充:如果忘记租户密码,可通过sys租户登录,执行ALTER USER root@mq_t1 IDENTIFIED BY '新密码'; 重置(后续会专门讲权限管理)。

三、核心实操:创建MySQL模式数据库

OceanBase MySQL模式创建数据库,支持两种方式:基础创建(默认参数)和自定义参数创建(指定字符集、读写属性等),结合官方demo,我们重点实操这两种方式,满足不同场景需求。

步骤1:查看租户内现有数据库

登录租户后,先查看默认存在的数据库,避免创建重名数据库:

sql 复制代码
-- 查看当前租户下所有数据库SHOW DATABASES;

执行后会显示3个默认系统数据库(和MySQL一致),无需修改/删除:

  • information_schema:系统元数据数据库,存储数据库、表、列等信息

  • mysql:系统数据库,存储用户、权限等信息

  • oceanbase:OceanBase租户专属系统数据库,用于存储租户相关配置

步骤2:基础创建(默认参数)

如果不需要自定义字符集、读写属性,直接用最简命令创建,语法和MySQL完全一致:

sql 复制代码
-- 创建名为test的数据库(自定义数据库名,建议小写)CREATE DATABASE IF NOT EXISTS test;

参数说明:

  • IF NOT EXISTS:可选,避免数据库已存在时报错(推荐加上);

  • test:自定义数据库名,命名规范:小写字母、数字、下划线,不能用关键字(如sys、mysql),长度不超过64个字符。

执行成功后,会提示 Query OK, 1 row affected ,表示数据库创建成功。

步骤3:自定义参数创建

实际开发中,我们通常需要指定数据库的字符集(避免中文乱码)、读写属性(如只读库),结合官方文档,实操如下:

sql 复制代码
-- 创建名为ob_business的数据库,指定字符集为utf8mb4,读写属性为可读写CREATE DATABASE IF NOT EXISTS ob_businessDEFAULT CHARACTER SET utf8mb4  -- 指定字符集(支持utf8mb4、gbk、gb18030等)DEFAULT COLLATE utf8mb4_general_ci  -- 指定字符序(对应字符集的默认排序规则)READ WRITE;  -- 读写属性:READ WRITE(可读写,默认)、READ ONLY(只读)

关键补充(结合官方文档重点):

  • 字符集选择:OceanBase支持utf8mb4、gbk、gb18030、binary、utf16等字符集,其中utf8mb4 支持所有 emoji 表情和特殊字符,是目前最常用的字符集,推荐优先使用;值得注意的是,OceanBase在语法上将UTF8视为UTF8MB4的同义词,方便无缝迁移现有MySQL数据

  • 读写属性:可根据业务需求设置,比如报表统计类数据库可设置为READ ONLY,防止误操作修改数据;业务库设置为默认的READ WRITE即可

  • 字符集修改:数据库创建后,字符集和字符序暂不支持修改,因此创建时一定要确认好字符集配置,避免后续返工

步骤4:验证数据库创建结果

创建完成后,再次执行查看命令,确认数据库已成功创建:

nginx 复制代码
SHOW DATABASES;

执行结果中,会新增我们创建的test和ob_business两个数据库,说明创建成功。

补充:也可以通过查询系统表,查看数据库的详细信息(如字符集、创建时间):

sql 复制代码
-- 查看指定数据库(ob_business)的详细信息SELECT *FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'ob_business';

步骤5:切换到目标数据库

数据库创建后,需要切换到该数据库,才能进行后续的建表、插入数据等操作,命令和MySQL一致:

css 复制代码
-- 切换到ob_business数据库USE ob_business;

切换成功后,终端会显示 obclient [ob_business]> ,表示已进入该数据库,可正常执行后续操作。

四、补充实操:数据库授权与删除(实用场景)

结合官方文档,补充两个高频操作:数据库授权(多用户访问)和数据库删除(清理无用数据库),贴合实际开发需求。

  1. 数据库授权(重点)

实际开发中,我们不会用root用户直接操作业务数据库,通常会创建普通用户,并授予数据库的操作权限(如查询、插入、修改),实操如下:

sql 复制代码
-- 1. 创建普通用户(用户名:ob_user,密码:Ob@123456,生产环境用复杂密码)CREATE USER IF NOT EXISTS ob_user IDENTIFIED BY 'Ob@123456';-- 2. 授予ob_user用户对ob_business数据库的所有操作权限GRANT ALL ON ob_business.* TO 'ob_user'@'%';-- 3. 刷新权限(使授权立即生效)FLUSH PRIVILEGES;

权限说明(结合官方文档):

  • ALL:授予所有操作权限(SELECT、INSERT、UPDATE、DELETE等),也可根据需求指定单个权限(如SELECT、INSERT);

  • ob_business.*:指定权限范围为ob_business数据库下的所有表;

  • 'ob_user'@'%':允许ob_user用户从任何IP连接(%表示所有IP),也可指定具体IP(如'192.168.1.100'),提升安全性;

  • 若需要让该用户拥有权限转授能力,可在授权时加上WITH GRANT OPTION 子句。

验证授权:用普通用户登录,查看是否能访问目标数据库:

nginx 复制代码
# 退出当前root用户连接exit# 用ob_user用户登录mq_t1租户,访问ob_business数据库obclient -h127.0.0.1 -P2881 -uob_user@mq_t1 -p'Ob@123456' -A -Dob_business

登录成功且能正常操作(如创建表),说明授权成功。

  1. 数据库删除(谨慎操作)

如果数据库不再使用,可执行删除命令,注意:删除数据库会删除其下所有表和数据,不可恢复,实操如下:

sql 复制代码
-- 删除ob_demo数据库(谨慎执行!)DROP DATABASE IF EXISTS ob_demo;

参数说明:IF EXISTS 避免数据库不存在时报错,推荐加上,防止误操作。

五、重要注意事项(结合单机版文档)

  1. 权限限制:只有租户的管理员(如root@mq_t1),才有创建、删除数据库的权限,普通用户需授权后才能操作指定数据库,MySQL模式暂不支持角色管理,权限需直接授予用户;

  2. 资源限制:数据库的资源使用,受所在租户的资源池限制(如CPU、内存),创建多个数据库时,无需额外分配资源,共享租户的资源配额;

  3. 命名规范:数据库名不能包含特殊字符(如@、#、空格),不能使用OceanBase预留关键字(如SYS、OCEANBASE),建议用"业务标识+数据库类型"命名(如ob_order、ob_user),长度不超过64个字符;

  4. 单机版特性:OceanBase单机版(all-in-one部署)的MySQL模式,数据库操作和MySQL完全兼容,可直接迁移MySQL的建库语句,无需修改;生产环境建议将数据库的数据目录和日志目录分配到不同磁盘,提升性能和稳定性;

  5. 客户端字符集配置:若连接后出现中文乱码,可临时修改客户端字符集(set names utf8mb4;),或永久性修改全局字符集参数,确保客户端与数据库字符集一致。

六、小结

本文我们完成了OceanBase MySQL模式数据库的创建、验证、授权和删除,核心要点总结:

  1. 前提:创建数据库必须先登录目标租户,不能用sys租户直接操作;

  2. 核心命令:创建(CREATE DATABASE)、查看(SHOW DATABASES)、切换(USE)、删除(DROP DATABASE),和MySQL完全兼容;

  3. 推荐实践:创建数据库时指定utf8mb4字符集,避免中文乱码;业务场景中使用普通用户操作数据库,授予最小必要权限,提升安全性;

  4. 关键提醒:数据库字符集创建后不可修改,删除数据库需谨慎,避免误删数据。

数据库创建完成后,下一步就是核心的"建表与插入数据"------这是我们真正存储业务数据的环节。下一篇,我们将结合官方文档,实操创建数据表、插入/查询数据,彻底完成从部署到数据存储的全流程。

往期回顾:

零基础OceanBase数据库入门:搭建你的第一个OceanBase数据库

零基础OceanBase数据库入门(2):查看集群基本信息

零基础OceanBase数据库入门(3):创建租户

本系列可以为信创项目国产化改造、分布式数据库学习的小伙伴们做参考。

相关推荐
coNh OOSI8 小时前
如何在 Windows 上安装 MySQL(保姆级教程2024版)
数据库·windows·mysql
Chasing__Dreams8 小时前
Redis--基础知识点--31--集群哈希槽为什么是16384?
数据库·redis·哈希算法
SeSs IZED8 小时前
MySQL中查看表结构
数据库·mysql·oracle
北冥有羽Victoria8 小时前
Django Auth组件完整版教程:从原理到项目落地
大数据·服务器·数据库·后端·python·django·sqlite
Irene19918 小时前
Oracle 21c XE 大数据开发常用 SQL 语法总结(不同 Oracle 版本,sql 语法大部分通用)
大数据·sql·oracle
ZGi.ai8 小时前
自然语言查数据库:Text-to-SQL工程实现与企业落地细节
数据库·sql·nl2sql·text-to-sql
JSON_L9 小时前
Fastadmin中实现敏感词管理
数据库·php·fastadmin
不是起点的终点10 小时前
【实战】Python 一键生成数据库说明文档(对接阿里云百炼 AI,输出 Word 格式)
数据库·python·阿里云
2301_8135995512 小时前
Go语言怎么做秒杀系统_Go语言秒杀系统实战教程【实用】
jvm·数据库·python
NCIN EXPE17 小时前
redis 使用
数据库·redis·缓存