mysql跨服务查询之FEDERATED存储引擎

本文详细介绍了MySQL的FEDERATED存储引擎,包括其功能、局限性和启用方法。FEDERATED引擎允许跨服务数据连接,但不支持事务和某些数据定义语言。开启存储引擎涉及在配置文件中添加选项并重启服务。通过创建FEDERATED表,本地MySQL可以链接到远程服务器的MySQL表,但需注意远程表的变更可能影响本地数据完整性。此外,还讨论了权限管理和其他跨服务连接的解决方案。
摘要由CSDN通过智能技术生成


一、FEDERATED存储引擎

01、从5.1.26开始,默认MySQL不启用federated存储引擎,所以需要在my.cnf中加入federated选项
02、或是在命令行用–federated选项启动mysqld。

1.1、说明:

  1. mysql 提供了一个类似Oracle中的数据库链接(DBLINK)功能的存储引擎–FEDERATED
  2. 当我们创建一个以FEDERATED为存储引擎的表时,服务器在数据库目录只创建一个表定义文件。文件由表的名字开始,并有一个frm扩展名。无其它文件被创建,因为实际的数据在一个远程数据库上。这不同于为本地表工作的存储引擎的方式。

1.2、局限性

  1. 远程服务器必须是一个MySQL服务器
  2. FEDERATED对其它数据库引擎的支持可能会在将来被添加,目前不支持其他数据库,跨服务器远程其他类型数据库可以采用创建远程连接服务器的方式
  3. FEDERATED表指向的远程表在你通过FEDERATED表访问它之前必须存在
  4. 一个FEDERATED表指向另一个FEDERATED表是可能的,但是你必须小心不要创建一个循环。
  5. 没有对事务的支持。
  6. 如果远程表已经改变,对FEDERATED引擎而言是没有办法知道的
    a、这个的原因是因为这个表必须象数据文件一样工作,除了数据库其它任何都不会被写入。
    b、如果有任何对远程数据库的改变,本地表中数据的完整性可能会被破坏。
  7. FEDERATED存储引擎支持SELECT, INSERT, UPDATE, DELETE和索引。
  8. 不支持ALTER TABLE, DROP TABLE或任何其它的数据定义语言语句。当前的实现不使用预先准备好的语句。
  9. 执行使用SELECT, INSERT, UPDATE和DELETE,但不用HANDLER。
  10. FEDERATED表不能对查询缓存不起作用。

目前的局限性是这些。
这些限制中的一些在FEDERATED处理机的将来版本可能被消除。

1.3、跨服务的方式

  1. mysql的FEDERATED存储引擎
  2. oracle的dblink
  3. 创建远程连接服务器
  4. 大数据的presto,接管数据源,然后聚合分析
  5. fink cdc也是一种方案

二、开启FEDERATED存储引擎

1.1、查看存储引擎

  1. 存在的FEDERATED存储引擎就配置文件开启
  2. 不存在就安装

查看

show engines;

Support 的值有以下几个:

  1. YES 支持并开启
  2. DEFAULT 支持并开启, 并且为默认引擎
  3. NO 不支持
  4. DISABLED 支持,但未开启

如图:
在这里插入图片描述

1.1.1、不存在存储引擎-安装

federated是支持动态安装的

install plugin federated soname 'ha_federated.so';

注明:如果不行话,就重新编码安装mysql吧

1.2、开启存储引擎

在mysql的配置文件中加入federated,然后重启mysql

注意:要放在mysqld的模块下,放在其他模块下无法识别变量

如图:
在这里插入图片描述
可以登入,表示变量识别成功
在这里插入图片描述

查看存储引擎

yes表示开启成功

在这里插入图片描述

1.3、拓展mysql存储引擎对比

在这里插入图片描述

三、跨服务连接示例

FEDERATED存储引擎开启成功了

1.1、 目标:

本地mysql去链接云服务器的mysql
在这里插入图片描述

1.2、创建关系

注意:如果远程表已经改变,对FEDERATED引擎而言是没有办法知道的

要了解FEDERATED存储引擎的局限性,看本文1.2的说明
如果有任何对远程数据库的改变,本地表中数据的完整性可能会被破坏

建议:表名要见名知意,知道他是远程连接的表,就像下面的示例:link_xx_xx表

创建

-- 创建出结构一样的表,表名可以不一样
CREATE TABLE `link_yun_sys_user` (
  `id` int(50) NOT NULL,
  `username` varchar(50) DEFAULT NULL,
  `password` varchar(50) DEFAULT NULL,
  `update_time` datetime DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE = FEDERATED CONNECTION='mysql://root:root@81.1x.2xx.10:3306/testLink/sys_user'
-- 指定引擎为 FEDERATED
-- 指定用户名、密码、ip、端口、数据库、表

如图:
在这里插入图片描述

1.2.1、权限说明

如果数据库有做权限限制,比如用户权限,增删改查权限,要进行授权,才能进行操作

1.3、成功效果

在这里插入图片描述

1.4、增删改查

本地新增1条数据

INSERT INTO link_yun_sys_user(id,username,`password`,update_time) VALUES('2','lisi','8888',NOW());

在这里插入图片描述
云服务器查看

SELECT * FROM sys_user

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

suqinyi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值