OceanBase 学习记录-- 建立MySQL租户,像用MySQL一样使用OB

文摘   2024-10-30 06:00   天津  

开头还是介绍一下群,如果感兴趣PolarDB ,MongoDB ,MySQL ,PostgreSQL ,Redis, OceanBase, Sql Server等有问题,有需求都可以加群群内有各大数据库行业大咖,可以解决你的问题。加群请联系 liuaustin3 ,(共2550人左右 1 + 2 + 3 + 4 +5 + 6 + 7+8)(1 2 3 4 5 群均已爆满,6群关闭自由申请,新人进7群,开8群)

在开始学习OceanBase的概念,发现了很多新的知识和新的架构的思维方式,用传统的数据库理念去理解OceanBase可能有一些吃力,这里总结开始学习OceanBase数据库的学习的一些概念和大家进行探讨,加速理解OceanBase的一些基础知识和概念。

1 OceanBase 的概念中的数据库或数据库实例,并不是我们之前理解的传统数据库的实例,一个主机一个实例,或者一群主机充当一个实例,而是云,或者用无数量级的主机的组合,来建立一个Oceanbase的实例。

大致思路是(物理方式理解) OceanBase实例---> 可用区----> 节点,一个OB的实例本身是可以在一个数据中心,也可以在多个数据中心,可用区是一组硬件类似,性能类似的节点组成的数据存储和计算的节点。OceanBase从概念上已经彻底不是我们之前的单机对数据库物理的理解的方式。IDC,区域,成为部署OceanBase的unit单元,对于最上端的OceanBase的总称为OceanBase cluster。

上图中一个OB的集群由三个子集群组成,每个子集群我们可以理解为是一个ZONE,一个OB的集群由上图中3个ZONE组成,一个节点OBSERVER可以存储多个分区的数据的分片,且每个数据都具有多个副本,分散在不同的ZONE中,确保数据的安全和可访问性。

在整体部署中,就可以完成数据库经常提到的容灾,多可用区,跨物理机房等在传统数据库中很难躲到的事情。在OB 官方文档中,显示OB可以做到 RPO=0,RTO=30秒的国际最高等级。

关于高可用的部分学习完文档可以总结成如下的一些点

1  OB的高可用的基础是基于时间的,每个ob server 都应该具有NTP服务,或类似的服务,保证整体的集群的主机的时间差不超过200ms。2  在OB集群中,每个分区都有且只有一个leader,和多个follower,数据的写操作均在leader中操作,在操作的中会将这些操作产生日志流,将这些日志流同步给其他的副本,来修改副本中的数据。3  主副本之间是可以进行选举的,信息的持久性基于多副本大多数数据落盘作为标准,主副本切换判断等工作由OB本身负责,用户不用进行干预。4  数据库的隔离级别和事务的可见性等,都与时间戳有关,每个租户都有自己的时间戳,从此保证租户内的事务的全局顺序性。5  用户访问OB的数据需要obproxy,代理来支持其中的工作,代理本身时刻跟踪OB节点分区的状态,通过OB CLUSTER的系统表来获得集群的状态,来对应用的访问进行路由的导向。系统表将告知每个OB节点的健康状态和分区的实时位置,且发现节点有故障的情况下,会通知响应的服务进行切换。

这里我们安装了Oceanbase 4.X 来对系统进行学习和理解,基于开源的版本,这里支持的MySQL的操作,LBACSYS,SYS,oraauditor等库里面都是空的,这与开源的库主要支持MySQL有关,如果是收费的库,ORACLE,则这几个库应该有表。

obclient [oceanbase]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| LBACSYS            |
| mysql              |
| oceanbase          |
| ocs                |
| ORAAUDITOR         |
| SYS                |
test               |
+--------------------+
8 rows in set (0.003 sec)

在oceanbase库中大约有610个系统表

| __all_tenant_object_type_history          |
| __all_tenant_ols_component                |
| __all_tenant_ols_component_history        |
| __all_tenant_ols_label                    |
| __all_tenant_ols_label_history            |
| __all_tenant_ols_policy                   |
| __all_tenant_ols_policy_history           |
| __all_tenant_ols_user_level               |
| __all_tenant_ols_user_level_history       |
| __all_tenant_profile                      |
| __all_tenant_profile_history              |
| __all_tenant_rewrite_rules                |
| __all_tenant_role_grantee_map             |
| __all_tenant_role_grantee_map_history     |
| __all_tenant_scheduler_job                |
| __all_tenant_scheduler_job_class          |
| __all_tenant_scheduler_job_run_detail     |
| __all_tenant_scheduler_program            |
| __all_tenant_scheduler_program_argument   |
| __all_tenant_security_audit               |
| __all_tenant_security_audit_history       |
| __all_tenant_security_audit_record        |
| __all_tenant_sysauth                      |
| __all_tenant_sysauth_history              |
| __all_tenant_tablespace                   |
| __all_tenant_tablespace_history           |
| __all_tenant_time_zone                    |
| __all_tenant_time_zone_name               |
| __all_tenant_time_zone_transition         |
| __all_tenant_time_zone_transition_type    |
| __all_tenant_trigger                      |
| __all_tenant_trigger_history              |
| __all_tenant_user_failed_login_stat       |
| __all_transfer_partition_task             |
| __all_transfer_partition_task_history     |
| __all_transfer_task                       |
| __all_transfer_task_history               |
| __all_type                                |
| __all_type_attr                           |
| __all_type_attr_history                   |
| __all_type_history                        |
| __all_unit                                |
| __all_unit_config                         |
| __all_user                                |
| __all_user_history                        |
| __all_weak_read_service                   |
| __all_zone                                |
| __all_zone_merge_info                     |
| __tenant_parameter                        |
| __wr_active_session_history               |
| __wr_control                              |
| __wr_snapshot                             |
| __wr_statname                             |
| __wr_sysstat                              |
+-------------------------------------------+
610 rows in set (0.004 sec)

obclient [oceanbase]> 
obclient [oceanbase]> 

ocs 中有大约10个表

obclient [oceanbase]> use ocs
Database changed
obclient [ocs]> show tables;
+---------------------+
| Tables_in_ocs       |
+---------------------+
| all_agent           |
| cluster_status      |
| dag_instance        |
| node_instance       |
| partial_maintenance |
| sub_task_log        |
| subtask_instance    |
| task_maintainer     |
| upgrade_pkg_chunk   |
| upgrade_pkg_info    |
+---------------------+
10 rows in set (0.003 sec)

而其他的一些库如information_schema 和 mysql中有部分的表,模拟了MySQL提供的信息。

obclient [information_schema]> show tables;
+------------------------------------------+
| Tables_in_information_schema             |
+------------------------------------------+
| CHARACTER_SETS                           |
| CHECK_CONSTRAINTS                        |
| COLLATIONS                               |
| COLLATION_CHARACTER_SET_APPLICABILITY    |
| COLUMNS                                  |
| COLUMN_PRIVILEGES                        |
| CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS |
| ENGINES                                  |
| EVENTS                                   |
| FILES                                    |
| GLOBAL_STATUS                            |
| GLOBAL_VARIABLES                         |
| KEY_COLUMN_USAGE                         |
| PARAMETERS                               |
| PARTITIONS                               |
| PROCESSLIST                              |
| QUERY_RESPONSE_TIME                      |
| REFERENTIAL_CONSTRAINTS                  |
| ROUTINES                                 |
| SCHEMATA                                 |
| SCHEMA_PRIVILEGES                        |
| SESSION_STATUS                           |
| SESSION_VARIABLES                        |
| STATISTICS                               |
| ST_GEOMETRY_COLUMNS                      |
| ST_SPATIAL_REFERENCE_SYSTEMS             |
| TABLES                                   |
| TABLE_CONSTRAINTS                        |
| TABLE_PRIVILEGES                         |
| TRIGGERS                                 |
| USER_PRIVILEGES                          |
| VIEWS                                    |
| VIEW_TABLE_USAGE                         |
+------------------------------------------+
33 rows in set (0.003 sec)

obclient [information_schema]> use mysql 
Database changed
obclient [mysql]> show tables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| db                        |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| proc                      |
| time_zone                 |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
11 rows in set (0.003 sec)


下面开始通过OceanBase文档中的信息,开始我们的学习OceanBase之旅,首先我们要开始建立一个租户,通过租户来管理我们的业务系统。

1  查看当前系统可以分配的资源


obclient [oceanbase]> SELECT SVR_IP,ZONE,(CPU_CAPACITY-CPU_ASSIGNED) cpu_free,round((MEM_CAPACITY-MEM_ASSIGNED)/1024/1024/1024) mem_free_gb FROM GV$OB_SERVERS;
+-----------+-------+----------+-------------+
| SVR_IP    | ZONE  | cpu_free | mem_free_gb |
+-----------+-------+----------+-------------+
| 127.0.0.1 | zone1 |       13 |           4 |
+-----------+-------+----------+-------------+
1 row in set (0.003 sec)

我们通过oceanbase数据库中的,资源表GV$OB_SERVERS,来获得当前数据库中的可以分配的资源,目前是CPU 13 MEM 4,下一步我们开始对数据库进行创建租户的操作。

obclient [oceanbase]> 
obclient [oceanbase]> SELECT SVR_IP,ZONE,(CPU_CAPACITY-CPU_ASSIGNED) cpu_free,round((MEM_CAPACITY-MEM_ASSIGNED)/1024/1024/1024) mem_free_gb FROM GV$OB_SERVERS;
+-----------+-------+----------+-------------+
| SVR_IP    | ZONE  | cpu_free | mem_free_gb |
+-----------+-------+----------+-------------+
| 127.0.0.1 | zone1 |       13 |           4 |
+-----------+-------+----------+-------------+
1 row in set (0.003 sec)

obclient [oceanbase]> 
obclient [oceanbase]> 
obclient [oceanbase]> CREATE RESOURCE UNIT test001 MAX_CPU 1,MEMORY_SIZE '1G';
Query OK, 0 rows affected (0.014 sec)

obclient [oceanbase]> 
obclient [oceanbase]> drop resource unit test001;
Query OK, 0 rows affected (0.008 sec)

obclient [oceanbase]> 
obclient [oceanbase]> 
obclient [oceanbase]> CREATE RESOURCE UNIT test001 MAX_CPU 1,MEMORY_SIZE '1G';
Query OK, 0 rows affected (0.010 sec)

obclient [oceanbase]> 
obclient [oceanbase]> CREATE RESOURCE POOL pool001 UNIT='test001',UNIT_NUM=1,ZONE_LIST=('zone1');
Query OK, 0 rows affected (0.035 sec)

obclient [oceanbase]> CREATE TENANT IF NOT EXISTS mysql001 CHARSET='utf8mb4',PRIMARY_ZONE='zone1',RESOURCE_POOL_LIST=('pool001') SET ob_tcp_invited_nodes='%';


Query OK, 0 rows affected (35.756 sec)

obclient [oceanbase]> 
obclient [oceanbase]> 
obclient [oceanbase]> obclient -h192.168.198.188 -P2881 -uroot@mysql001 -p -A
    -> ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your OceanBase version for the right syntax to use near 'obclient -h192.168.198.188 -P2881 -uroot@mysql001 -p -A' at line 1
obclient [oceanbase]> 
obclient [oceanbase]> 
obclient [oceanbase]> exit 
Bye
[root@oceanbase4 ~]# obclient -h192.168.198.188 -P2881 -uroot@mysql001 -p -A
Enter password: 
Welcome to the OceanBase.  Commands end with ; or \g.
Your OceanBase connection id is 3221497762
Server version: OceanBase_CE 4.2.1.9 (r109010012024101414-52e69c82a233d141442077439e3143dda41e28ae) (Built Oct 14 2024 14:57:29)

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)]> set PASSWORD = PASSWORD('mysql');
Query OK, 0 rows affected (0.075 sec)

一顿操作猛如虎,这里说一下兼容MySQL的OB的操作方式 1 先建立资源的单元 2 建立资源池 3 建立租户挂载资源池 4 建立MySQL账号 5 建立MySQL账号的密码

任务完成

今天的学习到此为止,后续会持续的学习OceanBase数据库,每天都学习,进步一点点。


置顶文章

OceanBase  学习记录 --  开始入门
OceanBase  学习记录 -- 安装简易环境
病毒攻击PostgreSQL暴力破解系统,防范加固系统方案(内附分析日志脚本)
阿里云数据库产品权限设计缺陷 ,六个场景诠释问题,你可以做的更好?
17000多张MongoDB表的锅 自动分析删除表数据难题--从头到尾的处理过程(文尾有MongoDB开发规范)
"DBA 是个der" 吵出MySQL主键问题多种解决方案
MongoDB 插入更新数据慢,开发问哪的问题?附带解决方案和脚本
用MySql不是MySQL, 不用MySQL都是MySQL 横批 哼哼哈哈啊啊
PostgreSQL 远程管理越来越简单,6个自动化脚本开胃菜
数据库最近第一比较多,OceanBase 定语加多了?
临时工访谈:OceanBase上海开大会,我们四个开小会 OB 国产数据库破局者
临时工说:OceanBase 到访,果然数据库的世界很卷,没边

往期热门文章:

阿里云数据库--市场营销聊胜于无--3年的使用感受与反馈系列

阿里云数据库产品 对内对外一样的卷 --3年阿里云数据库的使用感受与反馈系列

阿里云数据库使用感受--客户服务问题深入剖析与什么是廉价客户 --3年的使用感受与反馈系列

阿里云数据库使用感受--操作界面有点眼花缭乱 --3年的使用感受与反馈系列

临时工说:DBA 7*24H 给2万的工作,到底去不去?

PolarDB 最近遇到加字段加不上的问题 与 使用PolarDB 三年感受与恳谈

PostgreSQL 稳定性平台 PG中文社区大会--杭州来去匆匆

MySQL 让你还用5.7 出事了吧,用着用着5.7崩了

临时工访谈:问金融软件开发总监  哪些业务不用传统数据库
PolarDB  Serverless POC测试中有没有坑与发现的疑问
临时工访谈:PolarDB Serverless  发现“大”问题了  之 灭妖记 续集
临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一
PolarDB for PostgreSQL  有意思吗?有意思呀
PolarDB  Serverless POC测试中有没有坑与发现的疑问

MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验

临时工访谈:从国产数据库 到 普罗大众的产品 !与在美国创业软件公司老板对话

PostgreSQL 如何通过工具来分析PG 内存泄露

MySQL 的SQL引擎很差吗?由一个同学提出问题引出的实验
临时工访谈:我很普通,但我也有生存的权利,大龄程序员 求职贴
临时工说: 快速识别 “海洋贝壳类” 数据库方法速递
临时工说:国产 数据库 销售人员  图鉴
临时工说:DBA 是不是阻碍国产数据库发展的毒瘤 ,是不是?从国产DB老专家的一条留言开始 (其实更好看的是文章下方的留言)

感谢 老虎刘 刘老师 对 5月20日 SQL 问题纠正贴 ---PostgreSQL 同一种SQL为什么这样写会提升45%性能

PostgreSQL 同一种SQL为什么这样写会提升45%性能 --程序员和DBA思维方式不同决定

MongoDB 不是软柿子,想替换就替换

PostgreSQL  熊灿灿一句话够学半个月 之 KILL -9

MongoDB  挑战传统数据库聚合查询,干不死他们的

临时工说:国内数据库企业存活   “三板斧”

临时工访谈:庙小妖风大-PolarDB 组团镇妖 之 他们是第一  (阿里云组团PK笔者实录

临时工访谈:金牌 “女” 销售从ORACLE 转到另类国产数据库 到底  为什么?

临时工访谈:无名氏意外到访-- 也祝你好运(管理者PUA DBA现场直播)

临时工说:搞数据库 光凭的是技术,那DBA的死多少次?

PostgreSQL  分组查询可以不进行全表扫描吗?速度提高上千倍?
临时工说:分析当前经济形势下 DBA 被裁员的根因
PostgreSQL PG_DUMP 工作失败了怎么回事及如何处理
MySQL 八怪(高老师)现场解决问题实录
PostgreSQL 为什么也不建议 RR隔离级别,MySQL别笑
临时工访谈:OceanBase上海开大会,我们四个开小会 OB 国产数据库破局者
临时工说:OceanBase 到访,果然数据库的世界很卷,没边
临时工访谈:恶意裁员后,一个国产数据库企业程序员的心声
临时工说:上云后给 我一个 不裁 DBA的理由
PolarDB for PostgreSQL  有意思吗?有意思呀
PostgreSQL   玩PG我们是认真的,vacuum 稳定性平台我们有了
临时工说:裁员裁到 DBA 咋办  临时工教你 套路1 2 3
PolarDB  搞那么多复杂磁盘计费的东西,抽筋了吗?
临时工说:OceanBase 到访,果然数据库的世界很卷,没边
MONGODB  ---- Austindatabases  历年文章合集
MYSQL  --Austindatabases 历年文章合集
POSTGRESQL --Austindatabaes 历年文章整理
POLARDB  -- Ausitndatabases 历年的文章集合
PostgreSQL  查询语句开发写不好是必然,不是PG的锅
SQL SERVER 如何实现UNDO REDO  和PostgreSQL 有近亲关系吗
MongoDB 2023纽约 MongoDB 大会 -- 我们怎么做的新一代引擎 SBE Mongodb 7.0双擎力量(译)
MongoDB 2023年度纽约 MongoDB 年度大会话题 -- MongoDB 数据模式与建模
MongoDB  双机热备那篇文章是  “毒”
MongoDB   会丢数据吗?在次补刀MongoDB  双机热备
临时工说:从人性的角度来分析为什么公司内MySQL 成为少数派,PolarDB 占领高处
POLARDB  到底打倒了谁  PPT 分享 (文字版)
PostgreSQL  字符集乌龙导致数据查询排序的问题,与 MySQL 稳定 "PG不稳定"
PostgreSQL  Patroni 3.0 新功能规划 2023年 纽约PG 大会 (音译)

Austindatabases 公众号,主要围绕数据库技术(PostgreSQL, MySQL, Mongodb, Redis, SqlServer,PolarDB, Oceanbase 等)和职业发展,国外数据库大会音译,国外大型IT信息类网站文章翻译,等,希望能和您共同发展。
截止今天共发布 1242篇文章


AustinDatabases
关于数据库相关的知识分享
 最新文章