暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

Mysql 开启Federated引擎的方法

DB之路 2021-04-20
2859

前言:

在实际工作中,我们可能会遇到需要操作其他数据库实例的部分表,但又不想系统连接多库。此时我们就需要用到数据表映射。如同Oracle中的DBlink一般,使用过Oracle DBlink数据库链接的人都知道可以跨实例来进行数据查询,同样的,Mysql自带的FEDERATED引擎完美的帮我们解决了该问题。本篇文章介绍FEDERATED引擎的开启和使用。

进入mysql命令行,没有看到Federated,说明没有安装

mysql>show engines;

安装Federated

mysql> install plugin federated soname 'ha_federated.so';

查看有了Federated,但是是NO,说明没有开启

vi etc/my.cnf,加入一行federated,保存并退出

重启mysql服务

service mysqld restart

再次查看,已经是yes了

使用FEDERATED建表语句如下: 

CREATE TABLE (......) ENGINE =FEDERATED CONNECTION='mysql://[name]:[pass]@[location]:[port]/[db-name]/[table-name]'

name--mysql用户名

pass--mysql密码

location--ip

port:端口号

db-name:数据库名

table-name:表名

 PS:创建的表名和远程访问的表名可以不同。


FEDERATED使用总结

基于MySQL5.7.25版本,我在源端及目标端实验了多种DDL及DML,现简单总结如下,有兴趣的同学可以试试看。

  • 目标端建表结构可以与源端不一样 推荐与源端结构一致

  • 源端DDL语句更改表结构 目标端不会变化

  • 源端DML语句目标端查询会同步

  • 源端drop表 目标端结构还在但无法查询

  • 目标端不能执行DDL语句

  • 目标端执行DML语句 源端数据也会变化

  • 目标端truncate表 源端表数据也会被清空

  • 目标端drop表对源端无影响

5.FEDERATED引擎最佳实践

目前FEDERATED引擎使用范围还不多,若确实有跨实例访问的需求,建议做好规范,个人总结最佳实践如下:

  1. 源端专门创建只读权限的用户来供目标端使用。

  2. 目标端建议用CREATE SERVER方式创建FEDERATED表。

  3. FEDERATED表不宜太多,迁移时要特别注意。

  4. 目标端应该只做查询使用,禁止在目标端更改FEDERATED表。

  5. 建议目标端表名及结构和源端保持一致。

  6. 源端表结构变更后 目标端要及时删除重建。

本公众号长期关注于数据库技术以及性能优化,故障案例分析,K8S技术知识分享,工作心得等主题,欢迎扫码关注。


文章转载自DB之路,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论