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 模式中,我们也会逐步兼容这些功能,敬请期待!
相关文章:
OceanBase V4.2 MySQL模式下,如何通过DBLINK实现跨数据源访问
概述 跨数据源访问可通过 DBLINK(以下简称DBLINK)实现,从而使得业务代码能够像访问本地数据库一样轻松访问远端数据库。原先,DBLINK主要服务于Oracle模式,但由于OceanBase 的MySQL模式租户同样存在访问远端数据库的需…...
再谈C语言——理解指针(一)
内存和地址 内存 在讲内存和地址之前,我们想有个⽣活中的案例: 假设有⼀栋宿舍楼,把你放在楼⾥,楼上有100个房间,但是房间没有编号,你的⼀个朋友来找你玩, 如果想找到你,就得挨个房…...
day21-二叉树part08
235. 二叉搜索树的最近公共祖先 相对于 二叉树的最近公共祖先 本题就简单一些了,因为 可以利用二叉搜索树的特性无需全部遍历。特点:当前节点在p,q节点之前则必为最近公共祖先 class Solution {public TreeNode lowestCommonAncestor(TreeNo…...
【WPF应用42】WPF中的 GroupBox 控件详解
在 Windows Presentation Foundation (WPF) 中,控件是构建用户界面 (UI) 的基础。WPF 提供了丰富的控件库,其中包括 GroupBox 控件,它用于将相关的 UI 元素组织到逻辑分组中。在本博客文章中,我们将详细介绍 GroupBox 控件的功能、…...
LeetCode-72. 编辑距离【字符串 动态规划】
LeetCode-72. 编辑距离【字符串 动态规划】 题目描述:解题思路一:动规五部曲解题思路二:动态规划【版本二】解题思路三:0 题目描述: 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最…...
多张静图合成gif怎么做?一键极速合成gif
图片的格式有很多种,通常分为静态图片和动态图片。而动态图片基本上都是gif格式,想要把其他格式的静图变成gif格式动图的时候要怎么操作呢?通过使用gif动画图片(https://www.gif.cn/)制作网站,上传jpg、png…...
Es中bool 查询中的四个(must must_not should filter)
1.must :相当于and 2.must_not :相当于not 3.should:相当于or 4. filter:过滤 gte 大于 gt大于 lte小于等于 lt小于 使用示例: {“bool”:{“must”:{“match”:{“title”:”how to make millons “}},“must_not”:{“match”:{“tag”:”spam“}},“should”:[{…...
Docker容器嵌入式开发:Docker Ubuntu18.04配置mysql数据库
在 Ubuntu 18.04 操作系统中安装 MySQL 数据库的过程。下面是安装过程的详细描述: 首先,使用以下命令安装 MySQL 服务器: sudo apt install mysql-server系统会提示是否继续安装,按下 Y 键确认。 安装过程中,系统会…...
C++类和对象中上篇
1.类的6个默认成员函数 如果一个类中什么成员都没有,那就简称他为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,…...
基于linux进一步理解核间通讯
芯片架构分为同构和异构: 如下图TC397: 如下图TDA4: 如下图STM32MP157: 非对称多处理结构(AMP): AMP 结构是指每个内核运行自己的 OS 或同一 OS 的独立实例&#...
应用实战|从头开始开发记账本2:基于模板快速开始
上期视频我们创建好了BaaS服务的后端应用。从这期视频开始,我们将从头开发一个互联网记账本应用。本期视频我们介绍一下如何使用模板快速开启我们的应用开发之旅。 应用实战|从头开始开发记账本2:基于模板快速开始 相关代码 本期视频我们介绍…...
学习前端第二十天(条件分支:if 和 ‘?‘;逻辑运算符)
一、条件分支 if (…) 语句会计算圆括号内的表达式,并将计算结果转换为布尔型。 if(...) 语句计算括号里的条件表达式,如果计算结果是 true,就会执行对应的代码块{ }。 if 语句有时会包含一个可选的 “else” 块。如果判断条件不成立&…...
C++11的更新介绍(lamada、包装器)
🪐🪐🪐欢迎来到程序员餐厅💫💫💫 主厨:邪王真眼 主厨的主页:Chef‘s blog 所属专栏:c大冒险 总有光环在陨落,总有新星在闪烁 lambda表达式 C98中的一个…...
Golang 实现一个简单的 RPC 服务
分享一个简单的 rpc 服务框架 一、服务端实现 package mainimport ("log""net""net/rpc" )const HelloServiceName "main.HelloService"type HelloServiceInterface interface {Hello(request string, replay *string) error }func…...
Linux系统(centos,redhat,龙芯,麒麟等)忘记密码,怎么设置新的密码
Linux系统(centos,redhat,龙芯,麒麟等)忘记密码,怎么设置新的密码 今天在操作服务器时,DBA忘记了人大金仓数据库的kingbase密码,他的密码试了好多遍,都不行。最后只能给重置密码了 解决办法&a…...
SpringBoot的启动原理
运行Main方法: 应用程序启动始于Main方法的执行。在Main方法中,创建了一个SpringApplication实例,用于引导应用程序的启动。同时,SpringApplication会根据spring.factories文件加载并注册监听器、ApplicationContextInitializer等…...
git查看单独某一个文件的历史修改记录
git查看单独某一个文件的历史修改记录 git log -p 文件具体路径 注意,Windows下默认文件路径分隔符是 \,在git bash 里面需要改成 /。 git基于change代码修改与提交_git change-CSDN博客文章浏览阅读361次。git cherry-pick:复制多个提交comm…...
一键开启Scrum回顾会议的精彩时刻
其实回顾会议作为一个检视、反馈、改进环节,不仅在传统的瀑布管理模式中,还是在Scrum一类的敏捷管理流程中,都是非常重要的活动。一些团队认为它无法产生直接的价值,所以有意忽略了这个会议;一些团队在越来越多的回顾中…...
Python计算多个表格中多列数据的平均值与标准差并导出为新的Excel文件
本文介绍基于Python语言,对一个或多个表格文件中多列数据分别计算平均值与标准差,随后将多列数据对应的这2个数据结果导出为新的表格文件的方法。 首先,来看一下本文的需求。现有2个.csv格式的表格文件,其每1列表示1个变量&#x…...
nginx支持的多种负载均衡策略
目录 1.轮询(默认) 2. ip_hash 3. 加权轮询(weight) 4. fair(第三方) 5. 最少连接(least_conn) 1.轮询(默认) 将请求依次分配给每个服务器,确…...
eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...
阿里云ACP云计算备考笔记 (5)——弹性伸缩
目录 第一章 概述 第二章 弹性伸缩简介 1、弹性伸缩 2、垂直伸缩 3、优势 4、应用场景 ① 无规律的业务量波动 ② 有规律的业务量波动 ③ 无明显业务量波动 ④ 混合型业务 ⑤ 消息通知 ⑥ 生命周期挂钩 ⑦ 自定义方式 ⑧ 滚的升级 5、使用限制 第三章 主要定义 …...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
FFmpeg:Windows系统小白安装及其使用
一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...
在鸿蒙HarmonyOS 5中使用DevEco Studio实现企业微信功能
1. 开发环境准备 安装DevEco Studio 3.1: 从华为开发者官网下载最新版DevEco Studio安装HarmonyOS 5.0 SDK 项目配置: // module.json5 {"module": {"requestPermissions": [{"name": "ohos.permis…...
基于单片机的宠物屋智能系统设计与实现(论文+源码)
本设计基于单片机的宠物屋智能系统核心是实现对宠物生活环境及状态的智能管理。系统以单片机为中枢,连接红外测温传感器,可实时精准捕捉宠物体温变化,以便及时发现健康异常;水位检测传感器时刻监测饮用水余量,防止宠物…...
JavaScript 标签加载
目录 JavaScript 标签加载script 标签的 async 和 defer 属性,分别代表什么,有什么区别1. 普通 script 标签2. async 属性3. defer 属性4. type"module"5. 各种加载方式的对比6. 使用建议 JavaScript 标签加载 script 标签的 async 和 defer …...
