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.轮询(默认) 将请求依次分配给每个服务器,确…...
深入浅出Asp.Net Core MVC应用开发系列-AspNetCore中的日志记录
ASP.NET Core 是一个跨平台的开源框架,用于在 Windows、macOS 或 Linux 上生成基于云的新式 Web 应用。 ASP.NET Core 中的日志记录 .NET 通过 ILogger API 支持高性能结构化日志记录,以帮助监视应用程序行为和诊断问题。 可以通过配置不同的记录提供程…...
【Python】 -- 趣味代码 - 小恐龙游戏
文章目录 文章目录 00 小恐龙游戏程序设计框架代码结构和功能游戏流程总结01 小恐龙游戏程序设计02 百度网盘地址00 小恐龙游戏程序设计框架 这段代码是一个基于 Pygame 的简易跑酷游戏的完整实现,玩家控制一个角色(龙)躲避障碍物(仙人掌和乌鸦)。以下是代码的详细介绍:…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...
(十)学生端搭建
本次旨在将之前的已完成的部分功能进行拼装到学生端,同时完善学生端的构建。本次工作主要包括: 1.学生端整体界面布局 2.模拟考场与部分个人画像流程的串联 3.整体学生端逻辑 一、学生端 在主界面可以选择自己的用户角色 选择学生则进入学生登录界面…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云
目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...
push [特殊字符] present
push 🆚 present 前言present和dismiss特点代码演示 push和pop特点代码演示 前言 在 iOS 开发中,push 和 present 是两种不同的视图控制器切换方式,它们有着显著的区别。 present和dismiss 特点 在当前控制器上方新建视图层级需要手动调用…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
【 java 虚拟机知识 第一篇 】
目录 1.内存模型 1.1.JVM内存模型的介绍 1.2.堆和栈的区别 1.3.栈的存储细节 1.4.堆的部分 1.5.程序计数器的作用 1.6.方法区的内容 1.7.字符串池 1.8.引用类型 1.9.内存泄漏与内存溢出 1.10.会出现内存溢出的结构 1.内存模型 1.1.JVM内存模型的介绍 内存模型主要分…...
什么是VR全景技术
VR全景技术,全称为虚拟现实全景技术,是通过计算机图像模拟生成三维空间中的虚拟世界,使用户能够在该虚拟世界中进行全方位、无死角的观察和交互的技术。VR全景技术模拟人在真实空间中的视觉体验,结合图文、3D、音视频等多媒体元素…...
