日期:2014-05-16  浏览次数:20720 次

mysql 存储引擎 federated 应用
FEDERATED存储引擎访问在远程数据库的表中的数据,而不是本地的表。这个特性给某些开发应用带来了遍历,你可以直接在本地构建一个federated表来连接远程数据表,配置好了之后本地表的数据可以直接跟远程数据表同步。实际上这个引擎里面是不真实存放数据的,所需要的数据都是连接到其他MySQL服务器上。

如何配置?
mysql版本需要5.0以上
(1)查看是否安装了federated引擎

show engines;

Engine Support Comment Transactions XA Savepoints
MEMORY YES Hash based, stored in memory, useful for temporary tables NO NO NO
FEDERATED NO Federated MySQL storage engine  
MyISAM YES Default engine as of MySQL 3.23 with great performance NO NO NO
BLACKHOLE YES /dev/null storage engine (anything you write to it disappears) NO NO NO
MRG_MYISAM YES Collection of identical MyISAM tables NO NO NO
CSV YES CSV storage engine NO NO NO
ARCHIVE YES Archive storage engine NO NO NO
InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES

从中可以看出federated引擎没有开启

windows下在my.ini中在[mysqld]下直接加上一行 federated ,然后重启mysql服务,即可开启。

(2)建立远程数据表连接
比如:在server1上有数据库db1,其中有个表为table1,然后在server2上有数据库db2,我们要在db2上建立一个表,使其链接到db1上的table1中。那么我们就可以这样创建。
首先保证你要建立的表其结构要与被链接的表结构一模一样
CREATE TABLE table1 (
   id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
   name varchar(255) not null,
  PRIMARY KEY (`id`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://root:123@192.168.88.16:3306/db1/table1'

创建完成之后,你会神奇的发现你当前创建的这个表中已经有远程表里面的所有数据了。
详细的解释可以参看mysql官方文档http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#federated-description