在做项目的过程中,有一个需求,需要项目A调用项目B的部分表数据,但是数据不能进行上传两份数据,所以使用mysql Federated引擎
进行实现
A项目需要调用项目B数据库部分表内容时,但是B项目表使用产生的数据在A项目内,需要进行关联查询
开启 mysql FEDERATED
引擎 来源
在my.cnf中添加federated这一个属性就可开启.
再查询一下
第二步
slave中创建表结构的时候加入上面引擎.
CREATE TABLE `cas_user` (
`id` varchar(255) NOT NULL COMMENT 'id',
`encryid` varchar(255) DEFAULT NULL COMMENT '加密后的用户id',
`name` varchar(255) DEFAULT NULL COMMENT '用户名',
`password` varchar(255) DEFAULT NULL COMMENT '密码',
`mobile` varchar(40) DEFAULT NULL COMMENT '手机号码',
`email` varchar(100) DEFAULT NULL COMMENT '邮箱',
`sex` int(1) DEFAULT NULL COMMENT '性别(0:男,1:女)',
`credit` double(11,2) DEFAULT '0.00',
PRIMARY KEY (`oid`),
UNIQUE KEY `upk_user_id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='用户表'
ENGINE=FEDERATED CONNECTION='mysql://[username]:[password]@[服务器IP]:3306/[数据库]/[表名]';
username
代表 数据库用户
password
代表 数据库密码
从上面可以看出来, 我本身表就已经有啦innodb引擎, 我在后面再添加了一个.
注意: 只要表结构就行, 数据会自动从master中映射过来的.
演示:只要master中的cas_user表有操作,在slave中会显示同样的操作, 我在master中删除两条数据, 打开slave的cas_user会发现数据同样少了那被删的两条.
在服务A上的数据库X中直接进行A表与B表关联,就可以查询出需要的数据了。
这种方式有以下几点是需要注意的:
1)、该跨库查询方式不支持事务,最好别使用事务。
2)、不能修改表结构。
3)、MySQL使用这种跨库查询方式,远程数据库目前仅支持MySQL,其他数据库不支持。
4)、表结构必须和目标数据库表完全一致。