一、 什么是federated引擎

mysql中的federated类似于oracle中的dblink。

federated是一个专门针对远程数据库的实现,一般情况下在本地数据库中建表会在数据库目录中生成相对应的表定义文件,并同时生成相对应的数据文件。

[图]

但是通过federated引擎创建的表只是在本地有表定义文件数据文件则在远程数据库中

[图]

针对federated存储引擎表的查询会被发送到远程数据库的表上执行,本地是不存储任何数据的。

1. 本地的表结构必须与远程的完全一致。本地可以比远端数据库的字段少,但是不能多。因为多的话字段就没有地方存储了,还记得么,federated只在本地存储了表结构。

2. 远程的数据库必须是mysql。

3. 不支持事务。

4. 不支持表结构修改,远端表结构变了本地不知道(并不会主动通知本地,不理解,搞个监听器很难吗),一旦远端修改了表结构就gg了。

5. 创建时远程数据服务器必须已经存在此表。

6. 一个federated表指向另一个federated表是有可能的,但是要避免死循环。

7. 不使用查询缓存。

8. 远程服务器gg,federated表gg。

二、 如何使用

1. 开启federated引擎

mysql默认是没有打开federated存储引擎的。

如果报这种错误,就可能是没有打开federated存储引擎:

使用 show engines 命令查看当前的引擎支持状况:

在mysql的配置文件中 :

这个只是一个引用,去在圈中的文件中:

在[mysqld]节点下添加一行 federated:

重启mysql即可:

再连接到myql, show engines

2. 创建federated表

先在A服务器创建一张表:

-- A服务器
drop database if exists foo_db ;
create database foo_db default charset utf8 ;
use foo_db;
drop table if exists t_foo_table ;
create table t_foo_table(
id int primary key auto_increment ,
username varchar(20) not null ,
passwd varchar(20) not null
)charset=utf8;

然后在B服务器创建另一张表,结构和之前创建的一模一样,不同的只是多了指定engine和connection:

-- B服务器
drop database if exists foo_db ;
create database foo_db default charset utf8 ;
use foo_db;
drop table if exists t_foo_table ;
create table t_foo_table(
id int primary key auto_increment ,
username varchar(20) not null ,
passwd varchar(20) not null
)charset=utf8 engine=federated connection="mysql://root:@10.26.200.134/foo_db/t_foo_table";

connection的格式:

mysql://username:passwd@hostname/db_name/table_name

在A服务器往表中插入一条数据:

insert into t_foo_table (username, passwd) values ("foo", "bar");

在B服务器查询:

同理在B服务器插入,在A服务器也能查得到,实际上是发送到A服务器执行,数据也是存储在A服务器上的。

3. 借助于federated表跨节点join

在B数据库再创建一个表:

-- 要连接的表
drop table if exists t_bar ;
create table t_bar(
id int primary key auto_increment ,
barbar varchar(20) not null default ""
)charset utf8;

插入数据:

insert into t_bar (id,barbar) values (1, "barbar");
insert into t_bar (id,barbar) values (2, "barbarbar");
insert into t_bar (id,barbar) values (3, "barbarbarbar");
insert into t_foo_table (username, passwd) values ("foofoooofoo", "barbaaaaarbar");
insert into t_foo_table (username, passwd) values ("foofooooofoo", "barbaaaarbar");
insert into t_foo_table (username, passwd) values ("foofooooofoo", "barbaaaarbar");

连表查询:

select * from t_bar as t1
join t_foo_table as t2 on t1.id=t2.id ;

查询结果:

OK,查询结果是从两台服务器的两个节点中取出来的。

三、 总结

使用federated有很大的局限性,而且总感觉很不靠谱的样子,讲道理的话应该使用中间件来实现的。

.

mysql跨节点join——federated引擎的更多相关文章

  1. mysql 跨库JOIN

    现有两台MYSQL数据库 一台是192.168.1.1 端口3306 上有数据库DB1 有表TABLE1一台是192.168.1.2 端口3307 上有数据库DB2 有表TABLE2192.168.1 ...

  2. MySQL FEDERATED引擎使用示例, 类似Oracle DBLINK

    原文地址:http://it.dataguru.cn/article-3352-1.html 摘要: 本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来 ...

  3. MySQL FEDERATED引擎使用示例, 类似Oracle DBLINK(转)

    1 引擎说明 本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来实现. 有点类似Oracle中的 数据库链接(DBLINK). 要允许这个存储引擎, 当 ...

  4. mysql跨服务器查询

    MySQL FEDERATED引擎使用示例, 类似Oracle DBLINK 摘要: 本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来实现. 有点类似 ...

  5. Mysql的跨服务器 关联查询--Federated引擎

    1.确认开启Federated引擎     查询FEDERATED功能是否开启: show ENGINES;       2.如果状态为NO则需修改my.ini文件,增加一行federated配置: ...

  6. MySQL - FEDERATED引擎实现跨服务器查询

    1. MySQL插件的安装与卸载 # 查看插件信息 mysql> show plugins; mysql> select plugin_name,plugin_status,plugin_ ...

  7. 【转】 mysql使用federated引擎实现远程访问数据库(跨网络同时操作两个数据库中的表)

    原文转自:http://www.2cto.com/database/201412/358397.html 问题: 这里假设我需要在IP1上的database1上访问IP2的database数据库内的t ...

  8. 利用MySQL之federated引擎实现DBLink功能

    有时候我们需要跨库join查询,但是配置多数据源成本又太高,Oracle提供了DBLink功能,MySQL中也有类似的实现:federated-engine. MySQL中使用federated引擎的 ...

  9. 2020-07-07:mysql如何实现跨库join查询?

    福哥答案2020-07-07: 1.同服务跨库.表名称带上库名.SELECT * FROM 数据库名称1.表名称 JOIN 数据库名称2.表名称 ON 数据库名称1.表名称.tid = 数据库名称2. ...

随机推荐

  1. beta-1 阶段各组员的贡献分分配

    小组名称:飞天小女警 项目名称:礼物挑选小工具 小组成员:沈柏杉(组长).程媛媛.杨钰宁.谭力铭 bera-1阶段各组员的贡献分分配如下: 姓名 团队贡献分 谭力铭 5.2 沈柏杉 5.1 程媛媛 4 ...

  2. LoadRunner脚本增强技巧之参数化(二)

    特别提醒: 1.在形成数据池之后,数据库中的数据变化不会影响数据池中的数据. 2.数据文件一定要以一个空行结束,否则,最后一行输入的数据不会被参数所使用. 3.一般我们用到的很多的都是使用数据文件来保 ...

  3. lucence学习系列之一 基本概念

    1. Lucence基本概念 Lucence是一个java编写的全文检索类库,使用它可以为一个应用或者站点增加检索功能. 它通过增加内容到一个全文索引来完成检索功能.然后允许你基于这个索引去查询,返回 ...

  4. php获取字符串的编码格式的方法(函数)

    // 检测字符的编码格式 $encode = mb_detect_encoding($string, array('ASCII','UTF-8','GB2312','GBK','BIG5')); ec ...

  5. hive 连接(join)查询

    1.内连接 hive> select b.*,a.name from userinfo2 b,userinfo a where a.userid=b.userid; hive> selec ...

  6. Spring Boot系列教程四:配置文件详解properties

    一.配置随机数,使用随机数 在application.properties文件添加配置信息 #32位随机数 woniu.secret=${random.value} #随机整数 woniu.numbe ...

  7. 【BZOJ5415】【NOI2018】归程(克鲁斯卡尔重构树)

    [NOI2018]归程(克鲁斯卡尔重构树) 题面 洛谷 题解 我在现场竟然没有把这道傻逼题给切掉,身败名裂. 因为这题就是克鲁斯卡尔重构树的模板题啊 我就直接简单的说一下把 首先发现答案就是在只经过海 ...

  8. c语言中,指针加1的情况.指针变量详细介绍

    指针是一个特殊的变量,它里面存储的数值被解释成为内存里的一个地址. 要搞清一个指针需要搞清指针的四方面的内容: 指针的类型, 指针所指向的 类型, 指针的值或者叫指针所指向的内存区, 还有指针本身所占 ...

  9. C内存对齐问题-bus error!总线错误!其实是 字符串字面量修改问题!

    最近写个小程序,出现bus error! int main(void) { /** * char :1个字节 * char*(即指针变量): 4个字节(32位的寻址空间是2^32, 即32个bit,也 ...

  10. Codeforces 671D. Roads in Yusland(树形DP+线段树)

    调了半天居然还能是线段树写错了,药丸 这题大概是类似一个树形DP的东西.设$dp[i]$为修完i这棵子树的最小代价,假设当前点为$x$,但是转移的时候我们不知道子节点到底有没有一条越过$x$的路.如果 ...