<返回更多

MySQL 跨服务器访问之-FEDERATED引擎

2019-11-12    
加入收藏

在工作中会遇到MySQL要跨服务器访问,下面就介绍mysql的FEDERATED引擎如何建立跨服务器访问

进入mysql命令行,没有看到Federated,说明没有安装

mysql>show engines;

MySQL 跨服务器访问之-FEDERATED引擎

 

安装Federated

mysql> install plugin federated soname 'ha_federated.so';

MySQL 跨服务器访问之-FEDERATED引擎

 

查看有了Federated,但是是NO,说明没有开启

MySQL 跨服务器访问之-FEDERATED引擎

 

vi /etc/my.cnf,加入一行federated,保存并退出

MySQL 跨服务器访问之-FEDERATED引擎

 

重启mysql服务

service mysqld restart

MySQL 跨服务器访问之-FEDERATED引擎

 

再次查看,已经是yes了

MySQL 跨服务器访问之-FEDERATED引擎

 

使用FEDERATED建表语句如下:

CREATE TABLE (......) ENGINE =FEDERATED CONNECTION='mysql://[name]:[pass]@[location]:[port]/[db-name]/[table-name]' 

name--mysql用户名

pass--mysql密码

location--ip

port:端口号

db-name:数据库名

table-name:表名

PS:创建的表名和远程访问的表名可以不同。

目前使用federated 最大的缺点:

1. select count(*), select * from limit M, N 等语句执行效率非常低,数据量较大时存在很严重的问题,但是按主键或索引列查询,则很快,如以下查询就非常慢(假设 id 为主索引)

select id from db.tablea where id >100 limit 10 ;

而以下查询就很快:

select id from db.tablea where id >100 and id<150

2. 如果虚拟虚拟表中字段未建立索引,而实体表中为此字段建立了索引,此种情况下,性能也相当差。但是当给虚拟表建立索引后,性能恢复正常。

3. 类似 where name like "str%" limit 1 的查询,即使在 name 列上创建了索引,也会导致查询过慢,是因为

federated引擎会将所有满足条件的记录读取到本,再进行 limit 处理。

这几个问题已经严重影响了federated 在实际环境中的应用,所以这个引擎很冷门,不过在一些特定环境还是能用的。

————————————————

版权声明:本文为CSDN博主「纠结的逗号」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/commasx/article/details/87284878

声明:本站部分内容来自互联网,如有版权侵犯或其他问题请与我们联系,我们将立即删除或处理。
▍相关推荐
更多资讯 >>>