启动mysql的federated引擎与使用
查看当前是否开启federated引擎:
SHOW ENGINES
如果Support为NO,则表明未开启
如何开启?
修改mysql的配置文件:
linux为my.cnf,windows为my.ini
在配置文件中添加federated
重启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.****.net/qq_33578833/article/details/80177115
https://www.cnblogs.com/zhenxing/p/5336624.html
交流联系|QQ:1084138763|Email:[email protected]