首页 > 数据库 >openGauss学习笔记-94 openGauss 数据库管理-访问外部数据库-mysql_fdw

openGauss学习笔记-94 openGauss 数据库管理-访问外部数据库-mysql_fdw

时间:2023-10-09 18:31:31浏览次数:47  
标签:数据库 mysql 编译 fdw MySQL openGauss MariaDB

openGauss学习笔记-94 openGauss 数据库管理-访问外部数据库-mysql_fdw

openGauss的fdw实现的功能是各个openGauss数据库及远程服务器(包括数据库、文件系统)之间的跨库操作。目前支持的远程服务器类型包括Oracle、MySQL(MariaDB)、openGauss(postgres_fdw)、file_fdw 、dblink。

mysql_fdw是一款开源插件。openGauss基于开源的[mysql_fdw Release 2.5.3 版本进行开发适配。

编译和使用mysql_fdw需要环境上包含MariaDB的开发包,所以openGauss默认不编译mysql_fdw,下面依次介绍如何编译和使用mysql_fdw。

94.1 编译mysql_fdw

编译mysql_fdw需要安装MariaDB的开发库和头文件,推荐使用MariaDB的官方源进行安装。

配置好源后,使用yum install MariaDB-devel MariaDB-shared安装相关开发库。另外MariaDB-client是MariaDB的客户端工具,也可以根据需要安装,用于连接MariaDB进行测试。

安装好开发包后,就可以开始编译mysql_fdw了。编译时需要在执行configure时,加入**–enable-mysql-fdw选项。后续按照正常的openGauss编译方式编译即可。(openGauss的编译参考软件安装编译**)

编译完成后,编译产物为mysql_fdw.so,位于安装目录的lib/postgresql/ 下。mysql_fdw相关的sql文件和control文件,位于安装目录的**share/postgresql/Extension/**下。

如果编译安装时,没有加入**–enable-mysql-fdw选项,可以在openGauss安装完成后,再次编译mysql_fdw,然后手动将编译产物mysql_fdw.so放到对应的安装目录lib/postgresql/,将mysql_fdw–1.0–1.1.sql、mysql_fdw–1.1.sql、mysql_fdw–1.0.sql、mysql_fdw.control放到对应的安装目录share/postgresql/Extension/**即可。

94.2 使用mysql_fdw

  • 使用mysql_fdw需要连接MariaDB或者MySQL Server,MariaDB或MySQL Server请自行安装。

  • 加载mysql_fdw扩展:CREATE Extension mysql_fdw;

  • 创建服务器对象:CREATE SERVER

  • 创建用户映射:CREATE USER MAPPING

  • 创建外表:CREATE FOREIGN TABLE

    外表的表结构需要与MySQL/MariaDB侧的表结构保持一致。注意MySQL/MariaDB侧的表的第一个字段必须具有唯一性约束(如PRIMARY KEY、UNIQUE等)。

  • 对外表做正常的操作,如INSERTUPDATEDELETESELECTEXPLAINANALYZECOPY等。

  • 删除外表:DROP FOREIGN TABLE

  • 删除用户映射:DROP USER MAPPING

  • 删除服务器对象:DROP SERVER

  • 删除扩展:DROP Extension mysql_fdw;

94.3 常见问题

  • 在openGauss上建立外表时,不会同步在MariaDB/MySQL Server上建表,需要自己利用MariaDB/MySQL Server的客户端连接MariaDB/MySQL Server建表。
  • 创建USER MAPPING时使用的MariaDB/MySQL Server用户需要有远程连接MariaDB/MySQL Server及对表相关操作的权限。使用外表前,可以在openGauss server所在的机器上,使用MariaDB/MySQL Server的客户端,使用对应的用户名密码确认能否成功连接MariaDB/MySQL Server并进行操作。
  • 对外表执行DML操作时,出现Can't initialize character set SQL_ASCII (path: compiled_in)**错误。由于MariaDB不支持**SQL_ASCII编码格式,目前只能通过修改openGauss database的编码格式解决该问题。修改database编码格式的方式为update pg_database set encoding = pg_char_to_encoding('UTF-8') where datname = 'postgres'; datname根据实际情况填写。注意修改完编码格式后,需要重新开启一个gsql会话,才能使mysql_fdw使用更新后的参数。也可以通过在执行gs_initdb时,使用**–locale=LOCALE**,指定默认的编码格式为非SQL_ASCII编码。

94.4 注意事项

  • 两个mysql外表间的SELECT JOIN不支持下推到MariaDB/MySQL Server执行,会被分成两条SQL语句传递到MariaDB/MySQL Server执行,然后在openGauss处汇总处理结果。
  • 不支持IMPORT FOREIGN SCHEMA语法。
  • 不支持对外表进行CREATE TRIGGER操作。

标签:数据库,mysql,编译,fdw,MySQL,openGauss,MariaDB
From: https://blog.51cto.com/shuchaoyang/7780217

相关文章

  • 数据库MYSQL常用
    1命令操作数据库相关1.1连接和退出mysql服务#账号密码方式(我的本地因为暂时没有密码,所以不需要输入密码)mysql-hlocalhost-P3306-uroot-proot#退出\q1.2数据库操作1.2.1创建数据库createdatabasemydemo;1.2.2显示全部的数据库showdatabases;1.2......
  • Django 数据库--values_list 指定字段取值及 distinct 去重处理
    通过QuerySet会返回model的所有字段,通过obj.field_name即可获取对应字段的数据values():获取某一个或者某几个字段的数据指定字段使用values()指定参数可以仅仅返回相应字段的字典列表,如:name_dict_list=Project.objects.values('name')则name_dict_list= <Q......
  • MySQL数据库报 1040 too many connection
    找个是因为超过了最大的连接数你把最大的连接数改一下就可以了  改完之后记得重启mysqlwindows+R cmd进入黑窗口 ......
  • SQL SERVER查询数据库表的数量
    SELECTcount(*)FROMsys.objectsWHEREtype='U'  --统计表数量SELECTNAME FROMsys.objectsWHEREtype='U'     --列出表名称或者SELECTCOUNT(*)FROMSysObjectsWhereXType='U'  --统计表数量SELECTNameFROMSysObjectsWhereXType='U'......
  • SQLite 数据库
    SQLite是跨平台的单机版关系型数据库。 SQLite是一个进程内的数据库,实现了自给自足的、无服务器的、零配置的、事务性的SQL数据库引擎。它是一个零配置的数据库,意味着与其他数据库不一样,不需要在系统中配置。就像其他数据库,SQLite引擎不是一个独立的进程,可以按应用程序需求进......
  • 【webapp】jsp 操作数据库
    在JSP中连接和操作数据库需要使用Java的JDBC(JavaDatabaseConnectivity)API。下面是学习在JSP中使用JDBC连接和操作数据库的基本步骤:导入JDBC驱动程序:下载并导入适合您所使用的数据库的JDBC驱动程序JAR文件。不同的数据库有不同的驱动程序。将JDBC驱动程......
  • Grafana监控数据库性能
    软件版本grafana 7.5.3influxdb  1.7.11  influxdb-1.7.11.x86_64.rpmPython3.7.9下载地址:https://www.python.org/downloads/Python3安装模块,下载地址:https://pypi.org/#pip3listPackageVersion---------------------------certifi......
  • Sql Server 2008查询数据库中各表记录行数
    RT SELECTa.name,b.rows,LTRIM(STR(b.used*8/(casewhenb.used<1000then1else1024end),15,0)+(casewhenb.used<1000then'KB'else'MB'end))as[使用空间],LTRIM(STR(b.reserved*8/(casewhenb.reserved<1000th......
  • openGauss学习笔记-93 openGauss 数据库管理-访问外部数据库-oracle_fdw
    openGauss学习笔记-93openGauss数据库管理-访问外部数据库-oracle_fdwopenGauss的fdw实现的功能是各个openGauss数据库及远程服务器(包括数据库、文件系统)之间的跨库操作。目前支持的远程服务器类型包括Oracle、MySQL(MariaDB)、openGauss(postgres_fdw)、file_fdw、dblink。oracle......
  • 虚拟环境搭建、luffy后台项目创建,目录调整、封装logger、封装全局异常、封装Response
    虚拟环境搭建#1虚拟环境作用多个项目,自己有自己的环境,装的模块属于自己的#2使用pycharm创建-一般放在项目路径下:venv文件夹-lib文件夹---》site-package--》虚拟环境装的模块,都会放在这里-scripts--》python,pip命令#3本地创建......