一、FEDERATED介绍
说明
- mysql 提供了一个类似Oracle中的数据库链接(DBLINK)功能的存储引擎–FEDERATED
-
当我们创建一个以FEDERATED为存储引擎的表时,服务器在数据库目录只创建一个表定义文件。文件由表的名字开始,并有一个frm扩展名。无其它文件被创建,因为实际的数据在一个远程数据库上。这不同于为本地表工作的存储引擎的方式。
-
当开发人员需要使用 MySQL 和远程 MySQL 服务器中的多个数据库时,此技术非常有用。远程服务器存储数据,而本地服务器仅通过连接字符串指向它们。此操作的效率不取决于远程服务器上的存储引擎类型。
特点:
- 允许从远程 MySQL 数据库访问数据;
- 不需要复制或集群技术;
- 本地 federated 表: 查询该表时,会自动应用于远程联合表,数据不存储在本地;
缺点:
- 在处理连接表时,会大大降低工作速度;
- 对交易的处理奇怪;
- 该引擎的专业范围很窄,应小心处理;
局限性:
- 远程服务器必须是一个MySQL服务器。
- FEDERATED对其它数据库引擎的支持可能会在将来被添加,目前不支持其他数据库,跨服务器远程其他类型数据库可以采用创建远程连接服务器的方式
- FEDERATED表指向的远程表在你通过FEDERATED表访问它之前必须存在。
- 一个FEDERATED表指向另一个FEDERATED表是可能的,但是你必须小心不要创建一个循环。
- 没有对事务的支持。
- 如果远程表已经改变,对FEDERATED引擎而言是没有办法知道的。
a、这个的原因是因为这个表必须象数据文件一样工作,除了数据库其它任何都不会被写入。
b、如果有任何对远程数据库的改变,本地表中数据的完整性可能会被破坏。 - FEDERATED存储引擎支持SELECT, INSERT, UPDATE, DELETE和索引。
- 它不支持ALTER TABLE, DROP TABLE或任何其它的数据定义语言语句。当前的实现不使用预先准备好的语句。
- 执行使用SELECT, INSERT, UPDATE和DELETE,但不用HANDLER。
- FEDERATED表不能对查询缓存不起作用。
跨服务的方式
- mysql的FEDERATED存储引擎
- oracle的dblink
- 创建远程连接服务器
- 大数据的presto,接管数据源,然后聚合分析
- fink cdc也是一种方案
二、开启 FEDERATED 引擎
查看mysql支持的引擎
- show engines;
如果没有 federated 引擎得安装
- install plugin federated soname 'ha_federated.so';
如果 federated 显示为 NO 则必须修改 my.ini 文件并重启
- #开启跨库查询
- federated
- 修改配置文件后必须重启才生效
创建远程表
- 开启 federated 引擎后即可创建远程表
- -- 注意表结构必须完全保持一致,否则报错
CREATE TABLE `table_name` (
`name` varchar(200) DEFAULT NULL,
`day` date DEFAULT NULL,
`count` int(11) DEFAULT NULL
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://用户名:密码@ip:端口/数据库/表';