自学内容网 自学内容网

maridb双数据源联查解决方案:联合存储引擎(Federated Storage Engine)

本地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


原文地址:https://blog.csdn.net/qq_39312230/article/details/137965429

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!