MySQL开启Federated引擎以及使用示例

简述

Federated引擎可以让我们访问远程MySQL数据库中的数据。查询本地Federated表时,自动从远程数据库表中提取数据。本地只存储表的定义,表的数据还是存储在远程数据库中。

MySQL Federated是MySQL数据库中的一种特殊的存储引擎,它允许用户在不同的MySQL服务器之间共享数据。这种存储引擎的原理是将数据存储在远程MySQL服务器上,然后通过本地MySQL服务器来访问这些数据。
这种方法可以使用户在不同的MySQL服务器之间共享数据,而不需要复制数据或者进行数据同步。

MySQL Federated存储引擎的
优点:
(1)可以在不同的MySQL服务器之间共享数据,而不需要复制或进行数据同步。减少数据冗余,提高数据的一致性和可靠性。
(2)可以提高系统的可扩展性和可维护性,无需复杂的数据同步和管理。

缺点:
(1)远程MySQL服务器出现故障或网络故障,那本地MySQL服务器将无法访问远程MySQL服务器上的数据。
(2)MySQL Federated存储引擎的性能可能受到网络延迟和带宽限制的影响。

原理和Oracle中的dblink类似。

默认情况下,MySQL并未启用Federated引擎,如果要启用,必须使用federated配置启动。

开启Federated引擎

(1)在命令行界面,查看Federated引擎是否开启(默认未开启),如下图示:

mysql-federated-01.pngmysql-federated-01.png

(2)开启Federated引擎
my.ini新增配置:

[mysqld]
federated=on

(3)再次查看Federated引擎开启状态
重启mysql服务后,查看Federated引擎开启状态,如下图示(已开启):

mysql-federated-02.pngmysql-federated-02.png

使用示例

远程数据库表(InnoDB引擎):

CREATE TABLE `sys_dict_data` (
  `dict_code` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '字典编码',
  `dict_sort` int(4) NULL DEFAULT 0 COMMENT '字典排序',
  `dict_label` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典标签',
  `dict_value` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '字典键值',
  `remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注',
  PRIMARY KEY (`dict_code`) USING BTREE
) ENGINE = InnoDB COMMENT = '字典数据表' ROW_FORMAT = Dynamic;

本地数据库表(FEDERATED引擎):

-- 创建mysql_test服务器
CREATE SERVER mysql_test
FOREIGN DATA WRAPPER mysql
OPTIONS (USER 'test', PASSWORD '123456',HOST '192.168.1.100', PORT 3306, DATABASE 'test');

-- 创建远程数据库表sys_dict_data对应的本地表
CREATE TABLE remote_sys_dict_data (  
  `dict_code` VARCHAR(20) NOT NULL,
  `dict_label` VARCHAR(50) NOT NULL,
  `dict_value` VARCHAR(50) NULL
) ENGINE=FEDERATED CONNECTION='mysql_test/sys_dict_data';

查询远程数据库表数据(和查询本地表一样),如下图示:

(完)

最后修改于:2023年08月13日 17:30

添加新评论