MySQL中针对不同的功能需求提供了不同的存储引擎。所谓的存储引擎也就是MySQL下特定接口的具体实现。 
FEDERATED是其中一个专门针对远程数据库的实现。一般情况下在本地数据库中建表会在数据库目录中生成相应的表定义文件,并同时生成相应的数据文件。 
但通过FEDERATED引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中(这一点很重要)。 
通过这个引擎可以实现类似Oracle 下DBLINK的远程数据访问功能。

1、使用show engines 命令查看数据库是否已支持FEDERATED引擎:

2、开启federated引擎
vi /etc/my.cnf
在[mysqld]之后添加:
federated

3、先来安装federated存储引擎
install plugin federated soname 'ha_federated.so';

mysql> install plugin federated soname 'ha_federated.so';
ERROR 1125 (HY000): Function 'federated' already exists
已经安装好了,只是没有启用

4、测试一下是否可以:
[root@rhel6Mysql02 ~]# mysqld_safe --federated &
[1] 2194
[root@rhel6Mysql02 ~]# 130620 18:12:28 mysqld_safe Logging to '/var/lib/mysql/rhel6Mysql02.err'.
130620 18:12:28 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

若提示mysqld_safe A mysqld process already exists,说明mysql的进程占用了log文件,将mysql服务停止即可:

root@iZ94j7vkg4wZ:~#mysqld_safe --federated &

root@iZ94j7vkg4wZ:~# 160726 20:00:07 mysqld_safe Can't log to error log and syslog at the same time. Remove all --log-error configuration options for --syslog to take effect.
160726 20:00:07 mysqld_safe Logging to '/var/log/mysql/error.log'.
160726 20:00:07 mysqld_safe A mysqld process already exists

将mysql服务停止,然后再次运行即可:root@iZ94j7vkg4wZ:~#service mysql status

5、重启mysql服务后,用show engines 命令再次查看,已支持

6、使用FEDERATED建表语句如下:

CREATE TABLE (......) ENGINE =FEDERATED CONNECTION='mysql://[name]:[pass]@[location]:[port]/[db-name]/[table-name]' 
创建成功后就可直接在本地查询相应的远程表了。

需要注意的几点:

1. 本地的表结构必须与远程的完全一样。 
2.远程数据库目前仅限MySQL 
3.不支持事务 
4.不支持表结构修改

本地虚拟表名与远程表名,可不相同。

经过测试,这个引擎的一些额外特点: 
1. 本地虚拟表与远程实体表之间是 TCP 长连接,并且是多个客户端利用的。所以不用担心因频繁建立连接带来的网络开销。 
2.  本虚拟表表与远程实体表之间的网络连接断开后,当对虚拟表发起查询时,它会尝试重新连接远程实体表,所以我们不用担心网络连接断开造成的永久中断问题。 
3.   如果无时间未对本地虚拟表作任何操作,虚拟表与实体表之间的连接将在远程主机的 wait_timeout 秒后自动断开,当对虚拟表发起查询时,连接又会重新建立。

一些注意事项: 
1. 对本地虚拟表的结构修改,并不会修改远程表的结构 
2.  truncate 命令,会清除远程表数据 
3.  drop命令只会删除虚拟表,并不会删除远程表

4.  不支持 alter table 命令

目前使用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 在实际环境中的应用。

 

转载于:https://www.cnblogs.com/vickygu2007/p/5708937.html

mysql-Federated存储方式,远程表,相当于sql server的linked server相关推荐

  1. MySQL federated存储引擎--访问在远程数据库的表中的数据,而不是本地的表

    一.FEDERATED简介 federated就像他的名字所说"联盟",意思就是:把两个不同区域的数据库联系起来,以致可以访问在远程数据库的表中的数据,而不是本地的表. 二.安装F ...

  2. mysql federated引擎_MySQL 远程连接(federated存储引擎)

    概述 本文主要介绍通过federated存储引擎建立远程连接表 测试环境:mysql 5.6.21 步骤 开启federated存储引擎 先查看federated存储引擎存储引擎是否启用 SHOW E ...

  3. Mysql不同存储引擎的表转换方法

    Mysql不同存储引擎的表转换方法 1.Alter table 直接修改表的存储引擎,但是这样会导致大量的系统开销,Mysql为此要执行一个就表向新表的逐行复制.在此期间,转换操作可能会占用服务器的所 ...

  4. 在mysql中更新数据sql语句怎么写_在MySQL中,更新数据库表记录的SQL语句,包括______语句...

    在MySQL中,更新数据库表记录的SQL语句,包括______语句 答:insert replace update delete 在域F中,设其特征为2,对于任意a,b∈F,则(a+b)2 等于多少 ...

  5. Sqlcmd连接SQL方式(远程机器直接查询SQL)

    Sqlcmd连接SQL方式(远程机器直接查询SQL) 有时我们不想登录SQL服务器去查询数据库,那么我们怎么做呢? 1, SQLCMD命令:首先你的本地机器的域登录名必须有访问远程SQL数据库的权限 ...

  6. Case:MySQL Federated存储引擎引起的慢SQL优化

    这个案例并不是我遇到的,但是我的工作生产环境中有使用到federated存储引擎,所以记录一下. 优化前 有一条SQL部分截取内容如下,执行约268秒才能出结果: 优化后 从这条SQL的执行计划中可以 ...

  7. 万亿级企业MySQL海量存储分库分表设计实践

    互联网业务往往使用MySQL数据库作为后台存储,存储引擎使用InnoDB.我们针对互联网自身业务特点及MySQL数据库特性,讲述在具体业务场景中如何设计表和分表.本文从介绍MySQL相关基础架构设计入 ...

  8. 浅谈 MySQL 的存储引擎(表类型)

    什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体到计算机上数据库可以是存储器上一些文件的集合或者一些内存数据的集合. 我们通常说的MySql数据库,sql server数据库等等其实是 ...

  9. 浅谈MySql的存储引擎(表类型)

    转载自 http://www.cnblogs.com/lina1006/archive/2011/04/29/2032894.html 什么是MySql数据库 通常意义上,数据库也就是数据的集合,具体 ...

最新文章

  1. HttpServletrequest 与HttpServletResponse总结
  2. 《HTTP权威指南》– 8.网关、机器人
  3. 【MySQL】MySQL开发注意事项与SQL性能优化步骤
  4. hsf 架构_java分布服务:我打赌,没人可以这么精短的讲出分布服务架构吧
  5. vgg16卷积层的计算量_深度学习_经典网络_VGG16和ResNet152哪个参数量更多
  6. JPQL设置自增长、只读、文本类型等的注解
  7. c++排序数组下标_看动画学算法之:排序 - 基数排序
  8. django 1.3下关于静态文件staticfiles的设置
  9. linux中如何改IP
  10. 58技术主席:还原万亿级三高业务场景的设计与实践
  11. [APIO2013]机器人(斯坦纳树)
  12. 安卓手机端口号怎么查看_安卓手机来电闪光灯怎么设置
  13. Java 稳步成长、Kotlin 崛起、Go 保持独特风格,2020 年各大编程语言发展趋势一览...
  14. bottleneck resnet网络_Detection学习之四-利用pytorch实现resnet
  15. Excel数据线性回归
  16. 海康web3.0使用记录
  17. 一、Photoshop新版本(2019以后)常用快捷键总结、归纳
  18. mysql字符集与校对规则设置_MySQL 字符集与校对规则
  19. asp.net夜话之九:验证控件
  20. html弹窗可以关闭,js 点击弹窗以外 关闭弹窗

热门文章

  1. rust布料怎么弄_布料“难弄”,你需要从这六方面解决!
  2. 基于threejs的商场楼层展示导航系统源码_便民措施再升级就诊无需问路!我院“智能导航系统”正式上线啦!...
  3. odis工程师使用方法_开发区消防大队张立忠工程师莅临我校开展消防安全培训讲座...
  4. python 单行读取文件_python – 在使用for循环读取文件时跳过一行
  5. linux 服务器 重新启动 慢,Linux系统启动缓慢解决方法[阮胜昌]
  6. java如何捕获多个异常_是否可以在单个catch块中捕获多个Java异常?
  7. unity怎么做水面_防水博士小课堂 | 什么是背水面防水? 背水面防水施工到底该怎么做?...
  8. html把div分成两栏,div+css制作上中下,中间两列的全屏自适应布局
  9. mysql实际项目中使用多长时间_存储过程在实际项目中用的多吗?
  10. matlab程序怎么改,修改matlab程序