本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来实现. 有点类似Oracle中的
数据库链接(DBLINK).首先在源数据库执行命令show engines,结果如下图:
此时的FEDERATED的support值为“NO”,说明没有开启,Support 的值有以下几个:
YES | 支持并开启 |
DEFAULT | 支持并开启, 并且为默认引擎 |
NO | 不支持 |
DISABLED | 支持,但未开启 |
参考一下在windows下的解决办法,找到MYSQL的安装目录C:\Program Files\MySQL\MySQL Server 5.6里的my.int文件,可能没有,就把my-default.ini文件复制一个改名为my.int,然后在my.int文件里的[mysqld]下面加一行federated,保存,重启mysql服务,再用命令show engines查询,
此时FEDERATED的support变为YES了,然后在源数据库建个和目标数据库表(或视图)结构一样的表,
CREATE TABLE federated_table (
id int(20) NOT NULL auto_increment,
name varchar(32) NOT NULL default '',
other int(20) NOT NULL default '0',
PRIMARY KEY (id),
KEY name (name),
KEY other_key (other)
) ENGINE=FEDERATED CONNECTION='mysql://username:password@remote_host:3306/db_name/table_name';
然后就可以在源数据库执行select * from federated_table ,取出来的就是远程数据库的数据了。