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

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

你的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
| 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='用户表'
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表对源端无影响