OceanBase V4.2 MySQL模式下,如何通过DBLINK实现跨数据源访问

概述

跨数据源访问可通过 DBLINK(以下简称DBLINK)实现,从而使得业务代码能够像访问本地数据库一样轻松访问远端数据库。原先,DBLINK主要服务于Oracle模式,但由于OceanBase 的MySQL模式租户同样存在访问远端数据库的需求,因此在OceanBase 4.2版本及以后的版本中,我们开放了Mysql模式下的DBLINK读功能。

当前MySQL模式DBLINK读功能仅限于本地OceanBase集群的MySQL租户读取远端的OceanBase集群的MySQL租户的数据(同一集群下不同MySQL租户之间也可以使用MySQL DBLINK读功能)。暂不支持OceanBase的MySQL租户读取原生MySQL数据,或者原生MySQL读取OceanBase的MySQL租户数据。

MySQL DBLINK支持如下数据类型的读取。需要注意的是,受限于obclient,当前MySQL DBLINK功能拉取table schema时会把远端数据库表上enum和set类型的列当作varchar类型列处理。

数值类型:tinyint,  smallint, mediumint, int, bigint, float, double, decimal
时间类型:date,  time,  year,  datetime,  timestamp
字符类型:char, varchar, tinyblob, tinytext, blob, text, mediumtext, longblob, longtext
其他类型:enum,set

本文将向你介绍 OceanBase MySQL 模式下的 DBLINK 基本用法。

1. 创建DBLINK

1.1 描述

创建一个访问指定远端数据库的DBLINK。创建时需要指定DBLINK名字并且提供远端数据库的用户名、租户名、数据库名,密码、IP地址、端口号、集群名。

IP地址和端口号可以是指定某个OB Server的IP地址和端口号,或者是OceanBase集群的Proxy的IP地址和端口号。当创建DBLINK的端口号是集群的Proxy的端口号,且Proxy是由configurl部署的时候,需要指定集群名及Cluster名字。

1.2 语法

create_dblink_stmt:
CREATE DATABASE LINK [if not exists] dblink_name CONNECT TO user@tenant DATABASE database_name IDENTIFIED BY password HOST 'ip:port' [CLUSTER cluster_name];

1.3 参数说明

  • dblink_name:DBLINK的名字。
  • if not exists:兼容MySQL语法
  • user:远端数据库的用户名。
  • tenant:远端数据库的租户名,如果远端数据库是Oracle,则租户名始终为oracle
  • password:远端数据库的用户名的登录密码,密码里有例如@#!等除数字、字母以外的特殊字符时,需要使用单/双引号把密码括起来避免报语法出错。
  • database_name:远端msyql租户的database,DBLINK读取数据时默认访问该数据库,如果需要访问其他数据库可以在sql中给表指定特定数据库。
  • ip:远端数据库的IP地址。IP地址可以指定为集群的Proxy的IP地址,或者集群中指定OB Server的IP地址;ip为指定OB Server的IP地址时,则要求本地数据库和指定OB Server之间的网络是可以互通的。
  • port:远端数据库的端口号。可以指定为集群的Proxy的端口号,或者集群中指定OB Server的端口号;端口号为指定OB Server的端口号时,则要求本地数据库和指定OB Server之间的网络是可以互通的。
  • cluster_name: 远端OceanBase集群的名字。只有IP和端口号是Proxy的IP和端口号,且Proxy是由configurl部署的时候才需要指定集群名字。集群名字需要使用双引号括起来,因为集群名字是大小写敏感的,这样做可以避免可能的字母升格问题。

1.4 示例

OceanBase-MySQL模式的DBLINK功能访问远端OceanBase集群时可以指定访问某个具体OB Server也可以访问远端集群的OB Proxy。通常情况下,为了保证高可用性,我们推荐使用DBLINK连接到远端OceanBase集群的OB Proxy。

1.4.1 OceanBase-MySQL模式连接远端集群某个OB Server示例

创建连接到远端OceanBase的DBLINK,名字为ob_dblink。远端数据库的租户为mysql(可以指定任意MySQL租户),用户为user1,数据库为test,密码为passwd123,IP地址为100.88.92.176,端口号为35307。以上所用IP和端口号仅为示例所用(已打码处理),用户按照实际环境指定。


obclient>create database link if not exists ob_dblink connect to user1@mysql database test identified by 'passwd123' host '100.88.92.176:35307';
Query OK, 1 row affected (0.10 sec)

如下图所示,连接到远端OceanBase的DBLINKob_dblink创建成功。

1.4.2 OceanBase-MySQL模式连接远端集群Proxy示例

创建连接到远端OceanBase的DBLINK,名字为ob_dblink_proxy。远端数据库的租户为mysql(可以指定任意MySQL租户,示例使用了OceanBase的默认MySQL租户),用户为user1,数据库为test,密码为passwd123,集群名字为obcluster,IP地址为Proxy的IP地址100.88.92.176,端口号为Proxy的端口号35303,Proxy由configurl部署。以上所用IP和端口号仅为示例所用(已打码处理),用户按照实际环境指定。注意集群名字需要用双引号括住,防止集群名字的字母被升格为大写字母。


obclient>create database link if not exists  ob_dblink_proxy connect to user1@mysql database test identified by 'passwd123' host '100.88.92.176:35307' CLUSTER "obcluster";
Query OK, 1 row affected (0.10 sec)

如下图所示,连接到远端OceanBase的DBLINKob_dblink_proxy创建成功。

2. 使用DBLINK查询远端数据库表数据

2.1 语法

使用dblink做查询的语法和普通的 select 语法一致,唯一区别在于,使用 DBLINK 表时需要在table_reference后加上@dblink_name后缀。

2.2 示例

示例1

使用如下sql可以读取远端集群MySql租户内test库中的 number_t 表。

select * from number_t@ob_dblink;

如下图所示,OceanBase成功通过DBLINK访问了位于远端集群的number_t表。

示例2

使用如下sql可以读取远端集群MySql租户内test库中的 number_t 表,并和本地的 number_t 表做 join 操作。

select a.c_decimal, b.c_double from number_t a, number_t@ob_dblink b where a.c_int = b.c_int;

如下图所示,OceanBase成功通过DBLINK访问了位于远端集群MySql租户内test库的number_t表并且和本地的number_t表做了join。

示例3

ob_dblink创建时默认访问test库中的对象,如果需要访问其他库下的对象,可以显式指定数据库。例如使用如下sql可以读取远端集群MySql租户内mysql库中的 datetime_t 表。

select * from mysql.datetime_t@ob_dblink;

如下图所示,OceanBase成功通过DBLINK访问了位于远端集群的number_t表并且和本地的number_t表做了join。

3. 删除DBLINK

在不需要使用已创建好的DBLINK时,或者创建时给了错误的连接串(IP、PORT、用户名、密码等),我们可以使用删除语法将DBLINK删除。

3.1 语法

drop_dblink_stmt:
DROP DATABASE LINK [if exists] dblink_name;

3.2 参数说明

dblink_name:DBLINK的名字。

3.3 示例

使用如下sql可以删除名为ob_dblink的DBLINK。

OceanBase(root@oceanbase)>drop database link if exists ob_dblink;
Query OK, 1 row affected (0.072 sec)

如下图所示,ob_dblink已经被删除。

4. 查看已创建的DBLINK

4.1 语法

4.2版本查询方法:

select * from oceanbase.dba_db_links;

结语

本文简要介绍了 OceanBase v4.2 版本 MySQL 模式下 DBLINK的创建、删除和读操作。OceanBase v4.1 的 Oracle 模式下,不仅支持了 DBLink 的创建、删除、读操作,还已经支持了 DBLINK 的 DELETE、INSERT、UPDATE和MERGE INTO操作。在未来版本的 MySQL 模式中,我们也会逐步兼容这些功能,敬请期待!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/812743.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Springboot+Vue的Java项目-旅游网站系统(附演示视频+源码+LW)

大家好!我是程序员一帆,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:Java毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计 &am…

K-means和逻辑回归

逻辑回归 一个事件的几率是该事件发生的概率/该事件不发生的概率:P/(1-P) 对数几率是:log(P/(1-P)) **考虑对输入x分类的模型:**log(P/(1-P))wx 则 Pexp(wx)/(exp(w*x)…

Ubuntu上安装Python3.11-源码编译

1、下载依赖 sudo apt install -y wget build-essential libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev 2、上传文件 ,解压并进入 tar -xf Python-3.11.0.tar.xz 3、编译 cd Pyt…

跟TED演讲学英文:The dark side of competition in AI by Liv Boeree

The dark side of competition in AI Link: https://www.ted.com/talks/liv_boeree_the_dark_side_of_competition_in_ai Speaker:Liv Boeree Date: October 2023 文章目录 The dark side of competition in AIIntroductionVocabularyTranscriptSummary后记 Introduction Co…

实验5 流程图和盒图ns图

一、实验目的 通过绘制流程图和盒图,熟练掌握流程图和盒图的基本原理。 能对简单问题进行流程图和盒图的分析,独立地完成流程图和盒图设计。 二、实验项目内容(实验题目) 1、用Microsoft Visio绘制下列程序的程序流程图。 若…

浏览器工作原理与实践--渲染流水线:CSS如何影响首次加载时的白屏时间

在上一篇文章中我们详细介绍了DOM的生成过程,并结合具体例子分析了JavaScript是如何阻塞DOM生成的。那本文我们就继续深入聊聊渲染流水线中的CSS。因为CSS是页面中非常重要的资源,它决定了页面最终显示出来的效果,并影响着用户对整个网站的第…

数据结构复习指导之绪论(数据结构的基本概念)

文章目录 绪论: 考纲内容 知识框架 复习提示 1.数据结构的基本概念 1.1基本概念和术语 1.数据 2.数据元素 3.数据对象 4.数据类型 5.数据结构 1.2数据结构三要素 1.数据的逻辑结构 2.数据的存储结构 3.数据的运算 绪论: 考纲内容 算法时…

开源AI图像识别:支持文件批量识别快速对接数据库存储

随着数字化转型的不断深入,图像识别技术在各行各业中的应用越来越广泛。文件封识别作为图像识别技术的一个分支,能够有效地提高文件处理的自动化程度和准确性。本文将探讨文件封识别技术的原理、应用场景以及如何将识别后的内容批量对应数据库字段进行存…

CSS特效---HTML+CSS实现3D旋转卡片

1、演示 2、一切尽在代码中 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>Document</title&…

Day23_学点儿Java_多态复习

1 做错的选择题 Java中的多态性是通过以下哪个机制实现的&#xff1f;&#xff08;&#xff09; A. 方法重载 B. 方法覆盖 C. 抽象类 D. 接口2 多态复习 2.1 学点儿Java_Day7_继承、重载、重写、多态、抽象类 2.2 面向对象四大基本特征 封装、抽象、继承、多态 封装 面向…

Linux文件IO

文章目录 1.文件操作的知识点2.文件的理解3.标记位4.文件的本质5.文件的应用5.1 重定向5.1.1 重定向的接口5.1.2 缓冲区的理解 6.文件描述符2(stderr)的深入理解7.磁盘文件7.1 物理磁盘7.2 磁盘的存储结构7.3 磁盘存储的逻辑7.4 细化磁盘存储 8.dd指令挂载 1.文件操作的知识点 …

OpenHarmony编译构建系统

这篇来聊聊OpenHarmony的编译构建&#xff0c;经过前面的实践&#xff0c;再来看编译构建。 编译构建概述 在官网中提到了&#xff0c;OpenHarmony编译子系统是以GN和Ninja构建为基座&#xff0c;对构建和配置粒度进行部件化抽象、对内建模块进行功能增强、对业务模块进行功能…

C++ | Leetcode C++题解之第26题删除有序数组中的重复项

题目&#xff1a; 题解&#xff1a; class Solution { public:int removeDuplicates(vector<int>& nums) {int n nums.size();if (n 0) {return 0;}int fast 1, slow 1;while (fast < n) {if (nums[fast] ! nums[fast - 1]) {nums[slow] nums[fast];slow;}f…

uni-app实现分页--(2)分页加载,首页下拉触底加载更多

业务逻辑如下&#xff1a; api函数升级 定义分页参数类型 组件调用api传参

如何优化卷积算法

我们可以写一个卷积算法。 for (int oh 0; oh < OH; oh) {for (int ow 0; ow < OW; ow) {for (int oc 0; oc < OC; oc) {C[oh][ow][oc] 0;for (int kh 0; kh < KH, kh){for (int kw 0; kw < KW, kw){for (int ic 0; ic < IC, ic){C[oh][ow][oc] A[o…

Java JDK 22全新发布 - 猫头虎博主带你一起深入了解JDK22!

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

消息队列RabbitMQ入门学习

目录 1.初识MQ 1.1.同步调用 1.2.异步调用 1.3.技术选型 2.RabbitMQ 2.1.收发消息 2.1.1.交换机 2.1.2.队列 2.1.3.绑定关系 2.1.4.发送消息 3.SpringAMQP 3.1WorkQueues模型 3.1.1消息接收 3.1.2测试 3.1.3.能者多劳 3.1.3.总结 3.2.交换机类型 3.3.Fanout交…

C++设计模式:门面模式(十二)

1、概念与定义 “接口隔离”模式&#xff1a;在组建构建过程中&#xff0c;某些接口之间直接的依赖常常会带来很多问题、甚至根本无法实现。采用添加一层间接&#xff08;稳定&#xff09;接口&#xff0c;来隔离本来相互紧密关联的接口是一种常见的解决方案。 门面设计模式定…

SpringCloud、SpringBoot、JDK版本对应关系

SpringCloud与SpringBoot 版本 官网说明&#xff1a;https://spring.io/projects/spring-cloud#overview SpringBoot 与 JDK版本关系 发布说明&#xff1a;https://github.com/spring-projects/spring-boot/wiki/Spring-Boot-3.0-Release-Notes SpringBoot 3.x不再支持JDK1.…

低空经济再火,通过了解飞行汽车产业链与核心技术,我发现了汽车行业从业者新的机会!

低空经济最近又一次成为资本市场热议的话题&#xff0c;同时在两会报告中大篇幅的写入低空经济&#xff0c;并将其定义成为“新质生产力的代表”&#xff0c;低空经济是什么&#xff1f;与我们此前所聊过的飞行汽车之间又有什么样子的联系&#xff1f;我们作为汽车行业的从业者…