启动mysql的federated引擎与使用

查看当前是否开启federated引擎:


SHOW ENGINES
启动mysql的federated引擎与使用_第1张图片
如果Support为NO,则表明未开启

如何开启?

修改mysql的配置文件:
linux为my.cnf,windows为my.ini
在配置文件中添加federated
启动mysql的federated引擎与使用_第2张图片
 

重启mysql服务,再输入SHOW ENGINES命令,即可看到federated引擎已开启了

 

那么目前我用federated引擎做什么呢?

--跨库的连表查询

在同一个库下,我们可以“select A.id,B.id from A left join B on ~~~;“去查询,

但是如a,b两个库 的A和B表,如何去关联查询呢?

这时,我们就可以利用mysql的federated引擎,在库a上创建B表,
Are you kidding???这当然不是开玩笑,建表语句是有要求的

建表语句格式:
CREATE TABLE `table_name`(......) ENGINE =FEDERATED CONNECTION='mysql://[username]:[password]@[location]:[port]/[db-name]/[table-name]'

示例:

CREATE TABLE `user` (  
  `id` int(11) NOT NULL,  
  `name` varchar(30) NOT NULL,  
  `age` int(11) NOT NULL,  
  PRIMARY KEY (`id`)  
) ENGINE=FEDERATED    
CONNECTION='mysql://newuser:NewUser(123456)@127.0.0.1:3306/test_a/user';

注意!注意!!注意!!!

ENGINE=FEDERATED           !!!!

我们一般建表的时候,数据库引擎是:ENGINE=INNODB

此时我们要切换FEDERATED!!!

FEDERATED 引擎使用注意事项

解释:通过FEDERATED引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中,通过这个引擎可以实现类似Oracle 下DBLINK的远程数据访问功能。就是说,这种建表方式只会在数据库A中创建一个表B的表结构文件,表的索引、数据等文件还是在机器B上的数据库B中,相当于只是在数据库A中创建了表B的一个快捷方式。

1、FEDERATED 表可能会被复制到其他的slave数据库,你需要确保slave服务器也能够使用定义在connection中或mysql.servers表中的link的用户名/密码 连接上远程服务器。
2、远程服务器必须是MySQL数据库
3、在访问FEDERATED表中定义的远程数据库的表前,远程数据库中必须存在这张表。
4、FEDERATED 表不支持通常意义的索引,服务器从远程库获取所有的行然后在本地进行过滤,不管是否加了where条件或limit限制。
  --查询可能造成性能下降和网络负载,因为查询返回的数据必须存放在内存中,所以容易造成使用系统的swap分区或挂起。
5、FEDERATED表不支持字段的前缀索引
6、FEDERATED表不支持ALTER TABLE语句或者任何DDL语句
7、FEDERATED表不支持事务
8、本地FEDERATED表无法知道远程库中表结构的改变
9、任何drop语句都只是对本地库的操作,不对远程库有影响

参考:

https://www.cnblogs.com/linkxu1989/p/6999815.html
https://blog.csdn.net/qq_33578833/article/details/80177115
https://www.cnblogs.com/zhenxing/p/5336624.html

 

交流联系|QQ:1084138763|Email:[email protected]

你可能感兴趣的:(DataBase)