FEDERATED存储引擎概述
当创建使用标准的存储引擎中的一个(例如桌子MyISAM
,CSV
或InnoDB
),该表由表定义和相关联的数据。创建FEDERATED
表时,表定义是相同的,但是数据的物理存储是在远程服务器上处理的。
甲FEDERATED
表由两个部分组成:
- 甲远程服务器与数据库表,其又由表定义(存储在MySQL数据字典)和相关联的表的。远程表的表类型可以是远程
mysqld
服务器支持的任何类型,包括MyISAM
或InnoDB
。 - 甲本地服务器与数据库表,其中表定义相匹配,该远程服务器上的对应的表的。表定义存储在数据字典中。本地服务器上没有数据文件。而是,表定义包含指向远程表的连接字符串。
在FEDERATED
本地服务器上的表上执行查询和语句时,通常将在本地数据文件中插入,更新或删除信息的操作将发送到远程服务器以执行,在此操作中,它们将更新远程服务器或本地服务器上的数据文件。从远程服务器返回匹配的行。
FEDERATED
表设置的基本结构在图16.2“联邦表结构”中显示。
图16.2联合表结构

当客户端发出引用FEDERATED
表的SQL语句时,本地服务器(执行SQL语句的地方)和远程服务器(实际存储数据的地方)之间的信息流如下:
- 存储引擎将遍历
FEDERATED
表具有的每一列,并构造一个引用远程表的适当SQL语句。 - 该语句使用MySQL客户端API发送到远程服务器。
- 远程服务器处理该语句,而本地服务器检索该语句产生的任何结果(受影响的行数或结果集)。
- 如果该语句产生结果集,则每一列都将转换为该
FEDERATED
引擎期望的内部存储引擎格式,并可用于将结果显示给发出原始语句的客户端。
本地服务器使用MySQL客户端C API函数与远程服务器通信。它调用mysql_real_query()
发送语句。要读取结果集,它使用mysql_store_result()
并一次读取一行mysql_fetch_row()
。