前言:对 Federated引擎的解释

  • 通过FEDERATED引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中。
  • 通过这个引擎可以实现类似Oracle下DBLINK的远程数据访问功能。
  • 就是说,这种建表方式只会在数据库A中创建一个表B的表结构文件,表的索引、数据等文件还是在机器B上的数据库B中,相当于只是在数据库A中创建了表B的一个快捷方式。

1.准备阶段:开启Federated引擎

1.找到mysql的配置文件my.ini

2.在my.ini文件追加字段:federated
3.重启mysql服务,或者重启电脑

4.执行SHOW ENGINES; 确认打开FEDERATED引擎

2.实战阶段:实现两个数据库的表级数据同步

1.创建数据库db1,创建表tb1,插入数据

//建数据库db1
CREATE DATABASE db1;//创建表tb1
USE db1;
CREATE TABLE tb1(
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT
)ENGINE=INNODB;//插入数据
insert into tb1 select NULL;
insert into tb1 select NULL;
insert into tb1 select NULL;

在sqlyog里操作后,实现效果:

2.创建数据库db2

//建数据库db2
CREATE DATABASE db2;//重点:创建映射表remote_tb1
use db2;
create table remote_tb1(
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT
)ENGINE=FEDERATED
CONNECTION='mysql://root:123456@localhost:3306/db1/tb1';//创建表tb2
create table tb2(
id INT PRIMARY KEY NOT NULL AUTO_INCREMENT
)ENGINE=INNODB;//插入数据
insert into tb2 select NULL;
insert into tb2 select NULL;
insert into tb2 select NULL;

在sqlyog里操作后,实现效果:

3.测试对db2数据库里的表remote_tb1数据进行增删改查,db1里表tb1的数据是否会同步修改

delete from db2.remote_tb1 where id =3;

实验得知两边的表都会删除id=3的记录


4.tb2表上右键,创建触发器

创建触发器的语句:

DELIMITER $$CREATE/*[DEFINER = { user | CURRENT_USER }]*/TRIGGER `db2`.`tb2_insert_trigger` AFTER INSERTON `db2`.`tb2`FOR EACH ROW BEGINIF NOT EXISTS(SELECT * FROM remote_tb1 WHERE id=new.id) THENINSERT INTO remote_tb1(id) VALUES( new.id);END IF;END$$DELIMITER ;

F9运行之后,生成触发器,名称是之前自己设的,如下图

3.最终效果

在tb2表中增加一条记录,会通过触发器在remote_tb1表增加这条记录,再通过关联映射更改db1中tb1中的表记录。

4.FEDRATE引擎的特点

  1. 本地虚拟表与远程实体表之间是 TCP 长连接,并且是多个客户端利用的。所以不用担心因频繁建立连接带来的网络开销。
  2. 本虚拟表表与远程实体表之间的网络连接断开后,当对虚拟表发起查询时,它会尝试重新连接远程实体表,所以我们不用担心网络连接断开造成的永久中断问题。
  3. 如果无时间未对本地虚拟表作任何操作,虚拟表与实体表之间的连接将在远程主机的 wait_timeout 秒后自动断开,当对虚拟表发起查询时,连接又会重新建立。

5.注意事项

1、FEDERATED 表可能会被复制到其他的slave数据库,需要确保slave服务器也能够连接上远程服务器。
2、远程服务器必须是MySQL数据库
3、在访问FEDERATED表中定义的远程数据库的表前,远程数据库中必须存在这张表。
4、FEDERATED 表不支持通常意义的索引,服务器从远程库获取所有的行然后在本地进行过滤,不管是否加了where条件或limit限制。—查询可能造成性能下降和网络负载,因为查询返回的数据必须存放在内存中,所以容易造成使用系统的swap分区或挂起。
5、FEDERATED表不支持字段的前缀索引
6、FEDERATED表不支持ALTER TABLE语句或者任何DDL语句
7、FEDERATED表不支持事务
8、本地FEDERATED表无法知道远程库中表结构的改变
9、任何drop语句都只是对本地库的操作,不对远程库有影响
10、对本地虚拟表的结构修改,并不会修改远程表的结构
11、truncate命令,会清除远程表数据

6.目前使用FEDRATE引擎最大的缺点

1.limit语句查询过慢

 select count(*), select * from limit M, N  等语句执行效率非常低,数据量较大时存在很严重的问题但按主键或索引列查询,则很快。
   以下查询就非常慢(假设 id 为主索引) select * from test_db.xxl_job_log limit 1;而以下查询就很快: select * from test_db.xxl_job_log where id=1;

2.虚拟表和实体表字段不一致

如果虚拟表中字段未建立索引,而实体表中为此字段建立了索引,此种情况下,性能也相当差。
但是当给虚拟表建立索引后,性能恢复正常。

3.like语句查询过慢

类似 where name like "str%" limit 1 的查询,即使在 name 列上创建了索引,也会导致查询过慢。
原因:federated引擎会将所有满足条件的记录读取到本地,再进行 limit 处理。

Federated引擎实现两个mysql数据库的表级数据同步相关推荐

  1. mysql增量同步_在两个MySQL数据库之间实现数据增量同步

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 在两个数据库中实现数据增量同步,令数据库之间的数据能够同步更新. Oracle数据库IP:192.168.0.1(源 ...

  2. 让两个 mysql 自动同步_实现两个Mysql数据库之间同步的方案

    实现两个Mysql MySQL 为了实现replication 必须打开bin-log 项,也是打开二进制的MySQL 日志记录选项.MySQL 的bin log 二 进制日志,可以记录所有影响到数据 ...

  3. CentOs服务器下安装两个个MySql数据库踩坑日记

    本篇博客如题:在服务器上安装两个MySql. 背景: 其实并非本意非要安装两个服务器,奈何不知道前面项目的数据库密码,并且数据库版本是8.x,另外还有项目在上面运行,前面的人把数据库装到了系统盘,留下 ...

  4. 为什么说mysql数据库单表最大两千万?依据是啥?

    为什么说mysql数据库单表最大两千万?依据是啥? 前言 数据库单表行数最大多大 索引的结构 页的结构 从页到索引 B+树承载的记录数量 x怎么算 y的计算 行总数计算 行数超一亿就慢了吗? B树承载 ...

  5. linux的mysql主主_Linux下指定mysql数据库数据配置主主同步的实例

    一. 概念:① 数据库同步  (主从同步 --- 主数据库写的同时 往从服务器写数据) ② 数据库同步  (主主同步 --- 两台数据库服务器互相写数据) 二. 举例 主主数据库同步服务器配置 数据库 ...

  6. 关于mysql数据库回表的粗浅理解

    1关于mysql数据库回表 说一下现象 比如有有一张test表,设置id为主键,name为索引 当使用 select id,name,age from test where id=1 查询数据的时候, ...

  7. MySQL 数据库 User表权限以及用户授权详解

    转载:https://blog.mimvp.com/article/27956.html MySQL 常用权限操作 1)本机登陆mysql: mysql -u root -p (-p一定要有):改变数 ...

  8. mysql 外键查询_mysql 外键查询(mysql数据库多表联查)

    mysql 外键查询(mysql数据库多表联查) 2020-07-24 11:51:00 共10个回答 查看方式主要是通过第三方工具或者是sql语句,主要有以下三种方式1:使用Navicateform ...

  9. mysql数据库多表查询(内连接,外连接,自连接,子查询及案例分析)

    mysql数据库多表查询 之前接触的项目或者自己涉及的部分对于多表查询的使用都比较的少,常常是自己更具案例进行学习,最近见到的比较的多,所以今天就好好的总结一下,为下一步学习做准备! 1.多表查询关系 ...

最新文章

  1. scala言语基础学习八
  2. 半导体基础知识(3):双极结和场效应晶体管(BJT和FET)
  3. wkhtmltopdf:wkhtmltopdf(将html转换成pdf的利器)简介、安装、使用方法详细攻略
  4. Mask R-CNN论文理解
  5. java循环标号_java 标号 break 自循环
  6. Excel案例-杜邦分析法
  7. layui离线文档2.2.5
  8. back_insert_iterator
  9. 数字逻辑电路 逻辑运算 与、或、非、与非、或非、与或非、异或、同或 二进制运算技巧
  10. 微博android升级7.000,华为 Android 7.0 升级计划曝光:G9 青春版 /Nova 也有份
  11. C语言学习总结(三)-----函数指针
  12. Rayland-FDM打印机C200介绍
  13. Pixhawk原生固件PX4之常用函数解读
  14. flask之flash
  15. 给陈景润之子陈由伟的一封公开信
  16. 复盘 | 产品经理晋级连胜的诀窍
  17. 最长递增子序列问题 nyoj 17单调递增最长子序列 nyoj 79拦截导弹
  18. 金蝶K3 WISE 15.1金蝶K3 15.1金蝶K3 V15.1 金蝶K3 WISE 15.0金蝶K3 15.0金蝶K3 V15.0 14.3/14.2/14.1/14.0/13.1/13.0 12
  19. VMware 安装 黑苹果 镜像下载地址 体验一下OS
  20. 高防服务器的作用有哪些,高防服务器的作用和用途

热门文章

  1. Kubernetes之PersistentVolumeClaim 静态与动态供给实现NFS网络存储(李作强)
  2. Android扫码枪无输入框获取扫码内容(或者Android自助机获取扫码内容)
  3. 再见 RPM/DEB/TAR!下一代全平台安装程序来了!
  4. Android 旧项目打包 api-versions.xml Stream closed
  5. BUUCTF:[GXYCTF2019]BabySQli
  6. 卢松松主题php,2017最新卢松松网站模板博客版 Zblog主题模板PHP程序 SEO最好的主题模板...
  7. 有道云笔记android手写,有道云笔记Android新版发布 手写更逼真
  8. 【UE4】“xxx.generated.h”
  9. Mac上 vue-cli使用命令创建项目
  10. 会声会影2020模板海量素材包百度云资源免费下载