首先,需要注意的有几点:
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后则是远程数据库的连接信息,这里要注意的是避免使用带‘@’的密码以免混淆,效果如下:
MySQL的FEDERATED引擎实现类Oracle的DBlink
原文地址:http://blog.51cto.com/jim123/2047045