mysql跨服务查询之FEDERATED存储引擎的实现
作者:suqinyi
一、FEDERATED存储引擎
01、从5.1.26开始,默认MySQL不启用federated存储引擎,所以需要在my.cnf中加入federated选项
02、或是在命令行用–federated选项启动mysqld。
1.1、说明:
mysql 提供了一个类似Oracle中的数据库链接(DBLINK)功能
的存储引擎–FEDERATED
当我们创建一个以FEDERATED为存储引擎的表时,服务器在数据库目录只创建一个表定义文件。文件由表的名字开始,并有一个frm扩展名。无其它文件被创建,因为实际的数据在一个远程数据库上。这不同于为本地表工作的存储引擎的方式。
1.2、局限性
远程服务器必须是一个MySQL服务器
。
远程服务器必须是一个MySQL服务器。
FEDERATED对其它数据库引擎的支持可能会在将来被添加,目前不支持其他数据库,跨服务器远程其他类型数据库可以采用创建远程连接服务器的方式
FEDERATED表指向的远程表在你通过FEDERATED表访问它之前必须存在。
一个FEDERATED表指向另一个FEDERATED表是可能的,但是你必须小心不要创建一个循环。
没有对事务的支持。
如果远程表已经改变,对FEDERATED引擎而言是没有办法知道的。
a、这个的原因是因为这个表必须象数据文件一样工作,除了数据库其它任何都不会被写入。
b、如果有任何对远程数据库的改变,本地表中数据的完整性可能会被破坏。
FEDERATED存储引擎支持SELECT, INSERT, UPDATE, DELETE和索引。
它不支持ALTER TABLE, DROP TABLE或任何其它的数据定义语言语句。当前的实现不使用预先准备好的语句。
执行使用SELECT, INSERT, UPDATE和DELETE,但不用HANDLER。
FEDERATED表不能对查询缓存不起作用。
目前的局限性是这些。
这些限制中的一些在FEDERATED处理机的将来版本可能被消除。
1.3、跨服务的方式
- mysql的FEDERATED存储引擎
- oracle的dblink
- 创建远程连接服务器
- 大数据的presto,接管数据源,然后聚合分析
- fink cdc也是一种方案
二、开启FEDERATED存储引擎
1.1、查看存储引擎
- 存在的FEDERATED存储引擎就配置文件开启
- 不存在就安装
查看
show engines;
Support 的值有以下几个:
- YES 支持并开启
- DEFAULT 支持并开启, 并且为默认引擎
- NO 不支持
- 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
到此这篇关于mysql跨服务查询之FEDERATED存储引擎的实现的文章就介绍到这了,更多相关mysql FEDERATED存储引擎内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!