随着业务的复杂度不断的增加、数据库不断的切分,在分布式系统中往往一台或几台数据库并不能满足我们的需求,所以常常需要多台同时时用,而在平时需要通过其它服务器的数据库获取信息最为方便的就是数据链接,而比较常见的如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 |