FEDERATED是什么呢?
通过FEDERATED引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中。就是说,这种建表方式只会在数据库A中创建一个表B的表结构文件,表的索引、数据等文件还是在机器B上的数据库B中,相当于只是在数据库A中创建了表B的一个快捷方式。

1、:如何开启

1、是否支持FEDERATED引擎

alt text

2、开启FEDERATED引擎
window 修改my.ini文件/ linux 修改my.cof文件, 在[mysqld]节点下添加federated。

alt text

你的MYSQL已经支持FEDERATED引擎了

2、如何使用

举个栗子,A服务器 127.0.0.1 数据库 test 表 user (本地数据)
B服务器 192.168.1.100 数据库 dev 表user (远程数据)
需要将B服务器 dev库 user表数据映射到本地 test库 user表中

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#远程dev数据库user表结构
CREATE TABLE `user` (
`id` varchar(255) NOT NULL COMMENT 'id',
`name` varchar(255) DEFAULT NULL COMMENT '用户名',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`mobile` varchar(40) DEFAULT NULL COMMENT '手机号码',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`sex` int(1) DEFAULT NULL COMMENT '性别(0:男,1:女)',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='用户表'

# 在本地test数据库中创建执行
CREATE TABLE `user` (
`id` varchar(255) NOT NULL COMMENT 'id',
`name` varchar(255) DEFAULT NULL COMMENT '用户名',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`mobile` varchar(40) DEFAULT NULL COMMENT '手机号码',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`sex` int(1) DEFAULT NULL COMMENT '性别(0:男,1:女)',
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=0 DEFAULT CHARSET=utf8 COMMENT='用户表'
ENGINE =FEDERATED CONNECTION='mysql://root:passwd@192.168.1.100:3306/dev/user';

执行完成后、就可以尽情测试了

3、注意

1、FEDERATED 表不支持通常意义的索引,服务器从远程库获取所有的行然后在本地进行过滤,不管是否加了where条件或limit限制。
  –查询可能造成性能下降和网络负载,因为查询返回的数据必须存放在内存中,所以容易造成使用系统的swap分区或挂起。
2、目标端建表结构可以与源端不一样 推荐与源端结构一致
3、源端DDL语句更改表结构 目标端不会变化
4、源端DML语句目标端查询会同步
5、源端drop表 目标端结构还在但无法查询
6、目标端不能执行DDL语句
7、目标端执行DML语句 源端数据也会变化
8、目标端truncate表 源端表数据也会被清空
9、目标端drop表对源端无影响