本地MySQL数据库要访问远程MySQL数据库的表中的数据, 必须通过FEDERATED存储引擎来实现. 有点类似Oracle中的数据库链接(DBLINK)。使用FEDERATED存储引擎的表,本地只存储表的结构信息,数据都存放在远程数据库上,查询时通过建表时指定的连接符去获取远程库的数据返回到本地。操作步骤如下:
1.检查federated引擎是否开启。
点击进入Navicat并点击键盘上F6,出现命令行界面 ,输入指令:show engines;
若上图位置为YES则代表已开启,若为NO则需要开启,各数据库版本开启方式不一样,请自行查找所用版本数据库的开启方式。
2.建立映射表
在服务器A上有MySQL数据库a,在服务器B上有MySQL数据库b。现在需要将a库中的his_alarm表数据映射到数据库b中。此时需要在数据库b中建立表a.his_alarm,注意ENGINE和CONNECTION。
CREATE TABLE `a.his_alarm` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`des` varchar(512) DEFAULT NULL,
`type` varchar(16) NOT NULL,
`point_id` int(11) NOT NULL,
`depart_id` int(11) DEFAULT NULL,
`module_id` int(11) NOT NULL,
`device_id` int(11) NOT NULL,
`alarm_value` varchar(32) DEFAULT NULL,
`alarm_time` datetime NOT NULL,
`is_alarm` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci CONNECTION='mysql://root:123456@192.168.1.100:3306/a/his_alarm';
root为远程数据库连接的用户名,
123456为数据库密码
192.168.1.100为数据库所在ip地址
3306为远程数据库端口号
a为远程数据库库名
his_alarm为远程数据库表名
**
FEDERATED 引擎使用注意事项
**
1、FEDERATED 表可能会被复制到其他的slave数据库,你需要确保slave服务器也能够使用定义在connection中或mysql.servers表中的link的用户名/密码 连接上远程服务器。
2、远程服务器必须是MySQL数据库
3、在访问FEDERATED表中定义的远程数据库的表前,远程数据库中必须存在这张表。
4、FEDERATED 表不支持通常意义的索引,服务器从远程库获取所有的行然后在本地进行过滤,不管是否加了where条件或limit限制。
–查询可能造成性能下降和网络负载,因为查询返回的数据必须存放在内存中,所以容易造成使用系统的swap分区或挂起。
5、FEDERATED表不支持字段的前缀索引
6、FEDERATED表不支持ALTER TABLE语句或者任何DDL语句
7、FEDERATED表不支持事务
8、本地FEDERATED表无法知道远程库中表结构的改变
9、任何drop语句都只是对本地库的操作,不对远程库有影响
感谢以下博主的支持,参考链接如下:
https://blog.csdn.net/qiushisoftware/article/details/75426712
https://www.cnblogs.com/longshiyVip/p/5009763.html
https://blog.csdn.net/zhangjunli/article/details/130108894