Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  FEDERATED Storage Engine Overview

18.8.1 FEDERATED 存储引擎概述

当您使用标准存储引擎(如 MyISAMCSVInnoDB)创建表时,该表由表定义和关联数据组成。当您创建 FEDERATED 表时,表定义保持不变,但数据的物理存储是在远程服务器上处理的。

一个 FEDERATED 表由两个元素组成:

  • 一个 远程服务器,其中包含数据库表,该表由表定义(存储在 MySQL 数据字典中)和关联数据组成。远程表的表类型可以是远程 mysqld 服务器支持的任何类型,包括 MyISAMInnoDB

  • 一个 本地服务器,其中包含数据库表,表定义与远程服务器上的对应表相同。表定义存储在数据字典中。没有本地服务器上的数据文件。相反,表定义包括指向远程表的连接字符串。

在本地服务器上执行 FEDERATED 表的查询和语句时,通常将插入、更新或删除信息的操作发送到远程服务器执行,更新远程服务器上的数据文件或从远程服务器返回匹配的行。

一个基本的 FEDERATED 表设置结构如 图 18.2,“FEDERATED 表结构” 所示。

图 18.2 FEDERATED 表结构

Content is described in the surrounding text.

当客户端发出对 FEDERATED 表的 SQL 语句时,本地服务器(执行 SQL 语句)和远程服务器(物理存储数据)之间的信息流程如下:

  1. 存储引擎遍历 FEDERATED 表的每一列,并构建一个适合远程表的 SQL 语句。

  2. 该语句使用 MySQL 客户端 API 发送到远程服务器。

  3. 远程服务器处理语句,并将结果(受影响的行数或结果集)返回给本地服务器。

  4. 如果语句产生结果集,每一列将被转换为 FEDERATED 引擎期望的内部存储引擎格式,以便显示结果给原始语句的客户端。

本地服务器使用 MySQL 客户端 C API 函数与远程服务器通信。它调用 mysql_real_query() 发送语句。要读取结果集,它使用 mysql_store_result() 并使用 mysql_fetch_row() 一次 fetch 一行。