mysql跨节点join——federated引擎
一、 什么是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引擎的更多相关文章
- mysql 跨库JOIN
现有两台MYSQL数据库 一台是192.168.1.1 端口3306 上有数据库DB1 有表TABLE1一台是192.168.1.2 端口3307 上有数据库DB2 有表TABLE2192.168.1 ...
- MySQL FEDERATED引擎使用示例, 类似Oracle DBLINK
原文地址:http://it.dataguru.cn/article-3352-1.html 摘要: 本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来 ...
- MySQL FEDERATED引擎使用示例, 类似Oracle DBLINK(转)
1 引擎说明 本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来实现. 有点类似Oracle中的 数据库链接(DBLINK). 要允许这个存储引擎, 当 ...
- mysql跨服务器查询
MySQL FEDERATED引擎使用示例, 类似Oracle DBLINK 摘要: 本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来实现. 有点类似 ...
- Mysql的跨服务器 关联查询--Federated引擎
1.确认开启Federated引擎 查询FEDERATED功能是否开启: show ENGINES; 2.如果状态为NO则需修改my.ini文件,增加一行federated配置: ...
- MySQL - FEDERATED引擎实现跨服务器查询
1. MySQL插件的安装与卸载 # 查看插件信息 mysql> show plugins; mysql> select plugin_name,plugin_status,plugin_ ...
- 【转】 mysql使用federated引擎实现远程访问数据库(跨网络同时操作两个数据库中的表)
原文转自:http://www.2cto.com/database/201412/358397.html 问题: 这里假设我需要在IP1上的database1上访问IP2的database数据库内的t ...
- 利用MySQL之federated引擎实现DBLink功能
有时候我们需要跨库join查询,但是配置多数据源成本又太高,Oracle提供了DBLink功能,MySQL中也有类似的实现:federated-engine. MySQL中使用federated引擎的 ...
- 2020-07-07:mysql如何实现跨库join查询?
福哥答案2020-07-07: 1.同服务跨库.表名称带上库名.SELECT * FROM 数据库名称1.表名称 JOIN 数据库名称2.表名称 ON 数据库名称1.表名称.tid = 数据库名称2. ...
随机推荐
- 【week10】psp
项目 内容 开始时间 结束时间 中断时间 净时间 2016/11/19(星期六) 写博客 吉林一日游规格说明书 10:30 15:10 20 260 2016/11/20(星期日) 看论文 磷酸化+三 ...
- rabbitmq 配置用户信息
本文摘自:http://my.oschina.net/hncscwc/blog/262246 1. 用户管理 用户管理包括增加用户,删除用户,查看用户列表,修改用户密码. 相应的命令 (1) 新增一个 ...
- virtio 之后的数据直连
在上一篇中说了virtio这种半虚拟化方案之后,还有一种全虚拟化的方案,这种全虚拟化的方案中,直接宿主机上的设备,直接被虚拟化成了n个设备,然后这些设备可以直接被加载进guest os中当做一个普通的 ...
- zookeeper学习之集群环境搭建
一.安装环境 zookeeper:3.4.6 JDK:1.8 linux:centos6.5 64位 主机: server0:192.168.0.224server1:192.168.0.225se ...
- adb命令模拟按键事件KeyCode
例子: //这条命令相当于按了设备的Backkey键 adb shell input keyevent 4 //可以解锁屏幕 adb shell input keyevent 82 //在屏幕上做划 ...
- windows下面安装redis
一.下载windows版本的Redis 链接:https://pan.baidu.com/s/1i6X2klv 密码:j4pi 二.安装Redis 这里下载的是Redis-x64-3.2.100版本, ...
- EL语法 ${person.id} 这里面的id指的是实例对象的成员变量
EL语法 ${person.id} 这里面的id指的是实例对象的成员变量
- robot framework 安装
一.安装 Python 2.7 pip 和 setuptools (Python 的套件管理程式,最新版的Python 2.7.13已包含) Robot Framework (此工具本身) wxPyt ...
- BZOJ4881 线段游戏(二分图+树状数组/动态规划+线段树)
相当于将线段划分成两个集合使集合内线段不相交,并且可以发现线段相交等价于逆序对.也即要将原序列划分成两个单增序列.由dilworth定理,如果存在长度>=3的单减子序列,无解,可以先判掉. 这个 ...
- 【刷题】洛谷 P2664 树上游戏
题目描述 lrb有一棵树,树的每个节点有个颜色.给一个长度为n的颜色序列,定义s(i,j) 为i 到j 的颜色数量.以及 \[sum_i=\sum_{j=1}^ns(i,j)\] 现在他想让你求出所有 ...