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引擎是否开启(默认未开启),如下图示:
(2)开启Federated引擎
my.ini新增配置:
[mysqld]
federated=on
(3)再次查看Federated引擎开启状态
重启mysql服务后,查看Federated引擎开启状态,如下图示(已开启):
使用示例
远程数据库表(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';
查询远程数据库表数据(和查询本地表一样),如下图示:
(完)