Federated引擎允许您访问远程PolarDB MySQL版集群或社区MySQL数据库中的数据,而无需使用复制或集群技术。本地Federated表中未存储任何数据,查询本地Federated表会通过远程方式提取远程表数据。当您使用PolarDB MySQL版或社区MySQL标准存储引擎创建表时,该表由表定义和相关数据组成。创建Federated表时,表定义是相同的,但是数据的物理存储是在远程服务器上处理的。
Federated表由两个元素组成:
具有数据库表的远程PolarDB MySQL版集群或社区MySQL服务器,该数据库表由表定义(存储在MySQL数据字典中)和关联表组成。远程表的表类型可以是远程服务器支持的任何类型,包括MyISAM、InnoDB和CSV等。
具有数据库表的本地集群,其中表定义与远程服务器上相应表的定义相匹配。表定义存储在MySQL数据字典中,本地集群上没有数据文件,表定义包含一个指向远程表的连接字符串。
Federated表结构如下:

当在本地PolarDB MySQL版集群的Federated表上执行SQL时,通常会从本地PolarDB MySQL版集群插入数据文件,更新或删除数据文件的操作被发送到远程PolarDB MySQL版集群或社区MySQL服务器执行,在远程集群或服务器上更新数据文件或从远程集群或服务器返回匹配的行。
前提条件
集群版本需为PolarDB MySQL版8.0版本且修订版本需满足如下条件:
8.0.1.1.28或以上。
8.0.2.2.4或以上。
如何查看集群版本,请参见查询版本号。
使用限制
目前仅支持使用公网地址连接远端服务器的数据库。
不支持远程连接在ECS上自建的数据库。
不支持Federated引擎使用公网地址访问当前集群的数据库。
操作步骤
创建远端Server。语法如下:
CREATE SERVER <server_name> FOREIGN DATA WRAPPER mysql OPTIONS (HOST "<host_name>", PORT 3306, USER "<user_name>", PASSWORD "<password>", DATABASE "<db_name>");参数说明如下表所示:
参数名称
参数说明
server_name
远端服务器名称。
host_name
远程服务器的主机名或IP地址。
user_name
远程服务器上创建的用户名。
password
远程服务器上用户名对应的密码。
db_name
远程服务器上创建的数据库名称。
创建Federated表。
您可以通过三段式名称方式、指定远端Server或Connection来连接到远程表创建Federated表。
(推荐)通过三段式名称方式来创建Federated表。语法如下:
说明
仅支持PolarDB MySQL版8.0.2版本,且小版本为8.0.2.2.25及以上。
CREATE FOREIGN TABLE tbl_name for <server_name>.<remote_db_name>.<tbl_name>;示例如下:
CREATE FOREIGN TABLE t1 for server.test.t1;通过指定远端Server来创建Federated表。语法如下:
CREATE TABLE <tbl_name> (create_definition,...) ENGINE=FEDERATED CONNECTION='<server_name>/<tbl_name>';示例如下:
CREATE TABLE `t1`(`a` VARCHAR(100),UNIQUE KEY(`a`(30))) ENGINE=FEDERATED CONNECTION='server_name/t1';(不推荐)通过指定Connection来创建Federated表。语法如下:
CREATE TABLE <tbl_name> (create_definition,...) ENGINE=FEDERATED CONNECTION='<MYSQL://<user_name>:<password>@<host_name>:3306/<db_name>/<tbl_name>';示例如下:
CREATE TABLE `t1`(`a` VARCHAR(100),UNIQUE KEY(`a`(30))) ENGINE=FEDERATED CONNECTION='MYSQL://username:passsword@127.0.0.1:3306/test/t1';说明
由于指定Connection来创建Federated表的方式中,相关账号和密码是明文保存,因此不建议使用该方式。




