转载:在MySql上实现MSSQL的"链接服务器"功能

最近作个应用,要求跨服务器同步两个不同数据库的某张表。两个服务器上数据库用的都是MYSQL。用数据库发布的功能实现的话可控性太差,不是想要的。原来用MSSQL的链接服务器,觉得效果挺好的,网上搜了半天,怎么也找不到MySQL的对应功能,后来才发现关键词没用对,现在把找到的内容贡献出来,希望那些在狂搜"MySQL 链接服务器"的人能很快找到这里。:)

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值