FEDERATED是其中一个专门针对远程数据库的实现。一般情况下在本地数据库中建表会在数据库目录中生成相应的表定义文件,并同时生成相应的数据文件。
但通过FEDERATED引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中(这一点很重要),默认情况下面,mysql是不启用该存储 引擎的,如下
mysql> show engines;
从上面可以看到FEDERATED的Support是NO,说明没有启用,如果没有的话说明没有编译进去,需要重新安装,要像启用的话使Support为YES,可以在/etc/my.cnf加federated(在mysqld加),然后重启就可以启用
配置很简单
注意:本地创建的表必须在远程服务器存在,创建的字段也必须是远程表中的字段,可以比远程表的字段少,但是不能多,本地存储引擎选择:ENGINE =FEDERATED,
CONNECTION选项中的连接字符串的一般形式如下:scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name
还有一些连接字符串的例子:
CONNECTION='mysql://username:password@hostname:port/database/tablename' CONNECTION='mysql://username@hostname/database/tablename' CONNECTION='mysql://username:password@hostname/database/tablename'
1、在本地数据库上做如下操作
CREATE TABLE `game_broker`( `ID` int(11) NOT NULL AUTO_INCREMENT, `brokerid` varchar(10) NOT NULL COMMENT '券商id', `broker_name` varchar(20) NOT NULL COMMENT '名称', `father_id` int(11) NOT NULL COMMENT '父ID', `path` varchar(20) NOT NULL COMMENT 'id路径', `remark` varchar(100) COMMENT '备注', PRIMARY KEY (`ID`) ) ENGINE=FEDERATED CHARSET=utf8 CONNECTION='mysql://dasai_fed:[email protected]:3306/test/imc_game_broker';
2、在远程表上做操作
CREATE TABLE `imc_game_broker` ( `ID` int(11) NOT NULL AUTO_INCREMENT, `brokerid` varchar(10) NOT NULL COMMENT '券商id', `broker_name` varchar(20) NOT NULL COMMENT '名称', `father_id` int(11) NOT NULL COMMENT '父ID', `path` varchar(20) NOT NULL COMMENT 'id路径', `remark` varchar(100) COMMENT '备注', PRIMARY KEY (`ID`) ) EENGINE=InnoDB DEFAULT CHARSET=utf8;
3、在远程表所在的mysql数据库上添加一个账号
grant select on test.imc_game_broker to dasai_fed@'172.31.1.106' identified by 'daisai_fed';
4.操作2中的表数据,创建完成之后,你会神奇的发现你当前创建的这个表中已经有远程表里面的所有数据了。