MySQL的FEDERATED引擎实现类Oracle的DBlink

随着业务的复杂度不断的增加、数据库不断的切分,在分布式系统中往往一台或几台数据库并不能满足我们的需求,所以常常需要多台同时时用,而在平时需要通过其它服务器的数据库获取信息最为方便的就是数据链接,而比较常见的如Oracle中的DBlink一般,使用过Oracle的DBlink—数据库的链接的人都知道可以跨服务器数据库的来进行数据查询。而在MySQL5.0以后中通过使用FEDERATED引擎也可以实现类似于Oracle中DBlink,在MySQL5.5开始默认安装只是没有启用,同Oracle的DBlink一样MySQL使用FEDERATED引擎实现外链接建议是在同一个局域网内,这样可以减小彼此间的延迟,但两者之间还是有很大区别的,在MySQL下使用FEDERATED引擎实现的外链接需要在本地数据库中建虚拟表用以连接远程数据库,在这里就就简单的说明一下MySQL的FEDERATED引擎实现的数据库外链接。

首先,需要注意的有几点:

1、建立外链接于局域网内的环境实现最优;

2、使用FEDERATED引擎的外链接表,在本地是虚拟表,所以建表的示后不需要主键、索引、自增字段这些。同理,对本地虚拟表的结构修改,并不会修改远程表的结构;

3、TRUNCATE(截断表)会清除远程表数据,DROP只会删除本地虚拟表;

4、在虚拟表上不支持ALTER

在数据库中是否有FEDERATED引擎可以通过如下来查看:

mysql> SHOW ENGINES;
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |
| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |
| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |
| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |
| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |
| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |
| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |
| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |
| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |
+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+
9 rows in set (0.01 sec)

一般这种情况就是有FEDERATED引擎但是没有启用,启用很简单,在my.cnf或my.ini中的[mysqld]段中修改添加,如下:

[mysqld]
……
federated
……

重启MySQL,此时再看就启用了FEDERATED引擎

此时再本地数据库建虚拟表用来链接远程数据库,其表结构可以通过在远程数据库中通过SHOW CREATE TABLE来查看DDL,但是要注意去掉主键、索引、自增字段,但是本地的虚拟表的表名可以不同,如远程数据库:192.168.2.25下的my_test库下有一张book_price表,远程数据库上的DDL:

CREATE TABLE `book_price` (
  `book_name` varchar(255) NOT NULL DEFAULT '',
  `book_price` decimal(11,3) NOT NULL DEFAULT '0.000'
) ENGINE=InnoDB DEFAULT CHARSET=utf8

在本地数据库中的DDL如下:

CREATE TABLE `book_price_local` (
  `book_name` varchar(255) NOT NULL DEFAULT '',
  `book_price` decimal(11,3) NOT NULL DEFAULT '0.000'
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://root:password#@192.168.2.25:3306/my_test/book_price'
#源端表DDL ENGINE=federated CONNECTION= 'mysql://用户:密码@IP地址:端口/库名称/表名称';

这里需要注意的是CONNECTION后则是远程数据库的连接信息,这里要注意的是避免使用带‘@’的密码以免混淆,效果如下:

时间: 2024-08-13 22:17:02

MySQL的FEDERATED引擎实现类Oracle的DBlink的相关文章

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

有时候我们需要跨库join查询,但是配置多数据源成本又太高,Oracle提供了DBLink功能,MySQL中也有类似的实现:federated-engine. MySQL中使用federated引擎的表能够映射远程数据库的表,本地的这张表相当于远程数据库某表在本地的引用,在本地对表的操作能够实时的反应到远程表上,包括CRUD. 要实现首先需要开启本地库的federated引擎[远程数据库不需要任何配置],使用SHOW ENGINES;语句查询本地库是否开启了federated-engine:如果

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

问题: 这里假设我需要在IP1上的database1上访问IP2的database数据库内的table2表 方法: 这里database作为本地数据库需要开启federated引擎才可以访问远程的database内的表,具体开启方法如下: 本地IP1数据库DATABASE1开启FEDERATED引擎 http://blog.csdn.net/bravezhe/article/details/8269648 MYSQL命令行,查看FEDERATED引擎是否开启,默认是不开启 >show engin

MySQL开启federated引擎实现数据库表映射

1.查看federated引擎是否开启 点击进入Navicat并点击键盘上F6,出现命令行界面 ,输入指令:show engines; 2.开启federated引擎 Windows系统 : 在my.ini中加入federated 3.建立映射表 在服务器A上有MySQL数据库test_a,在服务器B上有MySQL数据库test_b.现在需要将test_a库中的user表数据映射到数据库test_b中.此时需要在数据库test_b中建立表user,注意ENGINE和CONNECTION. CRE

mysql添加Federated引擎问题

现在我有这么一个需求, 就是有两个项目, 一个叫项目A,一个项目B, 由于A的用户表和B的用户表是要实现一样的. 例如: 我在A项目中注册了,要实现在B项目中也能登录 由于用到的数据是mysql, 那么可以使用Federated引擎实现这个需求. 环境 首先查询一下mysql中有没有Federated这个引擎.我有的是mysql5.7.22 show engines; 结果 mysql> show engines; +--------------------+---------+--------

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

1.确认开启Federated引擎 查询FEDERATED功能是否开启: show ENGINES; 2.如果状态为NO则需修改my.ini文件,增加一行federated配置: 在[mysqld]下面添加 federated,然后重启mysql 3.建立映射表 注意: - 表名可以不同,但表结构要完全相同 - ENGINE=InnoDB 要改成 ENGINE=FEDERATED - 添加最下面一行:CONNECTION='mysql://用户名:密码@ip:端口/数据库名/表名' 4.结果(此

MySQL的存储引擎与日志说明

1.1 存储引擎的介绍 1.1.1 文件系统存储 文件系统:操作系统组织和存取数据的一种机制.文件系统是一种软件. 类型:ext2 3 4 ,xfs 数据.  不管使用什么文件系统,数据内容不会变化,不同的是,存储空间.大小.速度. 1.1.2 mysql数据库存储 MySQL引擎: 可以理解为,MySQL的“文件系统”,只不过功能更加强大. MySQL引擎功能: 除了可以提供基本的存取功能,还有更多功能事务功能.锁定.备份和恢复.优化以及特殊功能. 1.1.3 MySQL存储引擎种类 MySQ

Mysql的存储引擎介绍

下面主要介绍InnoDB.MyISAM和MEMEORY三种存储引擎. InnoDB存储引擎 InnoDB遵循CNU通用公开许可(GPL)发行.InnoDB已经被一些重量级互联网公司所采用,如雅虎.Slashdot和Google,为用户操作非常大的数据库提供了一个强大的解决方案.InnoDB给MySQL的表提供了事务.回滚.崩溃修复能力和多版本并发控制的事务安全.MySQL从3.23.34a开始包含InnoDB存储引擎.InnoDB是MySQL上第一个提供外键约束的表引擎,而且InnoDB对事务处

详细介绍Mysql各种存储引擎的特性以及如何选择存储引擎

最近业务上有要求,要实现类似oracle 的dblink linux版本 Server version: 5.6.28-0ubuntu0.14.04.1 (Ubuntu) 修改配置文件 /etc/mysql/my.cnf windows 版本 Server version: 5.6.21-log MySQL Community Server (GPL) 修改配置文件my.ini 接着将其开启,在 [mysqld] 下添加一行: federated 重启Mysql,完成. mysql> show

MySQL使用Federate引擎

1. 查看Mysql数据库是否已经安装Federate引擎 FEDERATES Support NO表示未开启. 2.开启federated引擎 windows下在my.ini中加入federated,即可开启; linux中,需要编译时加入选项,再在my.ini中加入federated,方可开启. 3.建立远程数据表链接 假如:在ServerA上有一个数据库dbtestA,在ServerB上有数据库dbtestB,要在ServerB的数据库dbtestB上建立 ServerA的数据库dbtes