利用MySQL之federated引擎实现DBLink功能

有时候我们需要跨库join查询,但是配置多数据源成本又太高,Oracle提供了DBLink功能,MySQL中也有类似的实现:federated-engine。

  1. MySQL中使用federated引擎的表能够映射远程数据库的表,本地的这张表相当于远程数据库某表在本地的引用,在本地对表的操作能够实时的反应到远程表上,包括CRUD。
  2. 要实现首先需要开启本地库的federated引擎【远程数据库不需要任何配置】,使用SHOW ENGINES;语句查询本地库是否开启了federated-engine;如果没有开启,修改mysqlData目录下的my.ini配置文件,在文件末尾追加一行【federated】字符串,然后重启MySQL服务器就可以了。
    注意:在linux环境,是在/etc/my.cnf文件末尾追加一行【federated】字符串。
  3. 前提是本地表必须与远程表的结构相同【最好直接拷贝远程表的建表SQL】,在创建本地表时指定远程表的链接与地址。
CREATE TABLE `t_button` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_bin NOT NULL,
  PRIMARY KEY (`id`)
)  ENGINE = FEDERATED DEFAULT CONNECTION = 'mysql://root:[email protected]:3306/yang_dev/t_remote_button' CHARSET = utf8-mb4;

只要本地表创建完成,就实现了两表的实时同步,此时就可以像操作本地表一样操作远程表。
另一种方式是在数据库级别的同步,适合更大粒度的同步。
由于远程连接中已经使用了@字符,所以用户名和密码中不能再有@字符。
注意
- 其实本地表只存了表结构,真实数据仍然在远程表,所有的数据操作最终都落实到了远程表,所以这样做可能会增加远程表的压力
- 远程表不能是视图。
- 本地可以对对远程表进行CRUD操作,为了安全起见,建议实践中给远程数据库和连接的表做单独的用户权限限制。

原文地址:https://www.cnblogs.com/JaxYoun/p/12360567.html

时间: 2024-10-10 18:11:29

利用MySQL之federated引擎实现DBLink功能的相关文章

MySQL的FEDERATED引擎实现类Oracle的DBlink

随着业务的复杂度不断的增加.数据库不断的切分,在分布式系统中往往一台或几台数据库并不能满足我们的需求,所以常常需要多台同时时用,而在平时需要通过其它服务器的数据库获取信息最为方便的就是数据链接,而比较常见的如Oracle中的DBlink一般,使用过Oracle的DBlink-数据库的链接的人都知道可以跨服务器数据库的来进行数据查询.而在MySQL5.0以后中通过使用FEDERATED引擎也可以实现类似于Oracle中DBlink,在MySQL5.5开始默认安装只是没有启用,同Oracle的DBl

mysql使用federated引擎实现远程访问数据库(跨网络同时操作两个数据库中的表)

问题: 这里假设我需要在IP1上的database1上访问IP2的database数据库内的table2表 方法: 这里database作为本地数据库需要开启federated引擎才可以访问远程的database内的表,具体开启方法如下: 本地IP1数据库DATABASE1开启FEDERATED引擎 http://blog.csdn.net/bravezhe/article/details/8269648 MYSQL命令行,查看FEDERATED引擎是否开启,默认是不开启 >show engin

MySQL开启federated引擎实现数据库表映射

1.查看federated引擎是否开启 点击进入Navicat并点击键盘上F6,出现命令行界面 ,输入指令:show engines; 2.开启federated引擎 Windows系统 : 在my.ini中加入federated 3.建立映射表 在服务器A上有MySQL数据库test_a,在服务器B上有MySQL数据库test_b.现在需要将test_a库中的user表数据映射到数据库test_b中.此时需要在数据库test_b中建立表user,注意ENGINE和CONNECTION. CRE

mysql添加Federated引擎问题

现在我有这么一个需求, 就是有两个项目, 一个叫项目A,一个项目B, 由于A的用户表和B的用户表是要实现一样的. 例如: 我在A项目中注册了,要实现在B项目中也能登录 由于用到的数据是mysql, 那么可以使用Federated引擎实现这个需求. 环境 首先查询一下mysql中有没有Federated这个引擎.我有的是mysql5.7.22 show engines; 结果 mysql> show engines; +--------------------+---------+--------

利用MYSQL的函数实现用户登录功能,进出都是JSON(第二版)

CREATE DEFINER=`root`@`%` FUNCTION `uc_session_login`( `reqjson` JSON, `srvjson` JSON ) RETURNS json LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT 'UC的用户登录,返回JSON' BEGIN #调用例子 #SELECT `uc_session_login`(JSON_OBJECT('appid',

Mysql的跨服务器 关联查询--Federated引擎

1.确认开启Federated引擎 查询FEDERATED功能是否开启: show ENGINES; 2.如果状态为NO则需修改my.ini文件,增加一行federated配置: 在[mysqld]下面添加 federated,然后重启mysql 3.建立映射表 注意: - 表名可以不同,但表结构要完全相同 - ENGINE=InnoDB 要改成 ENGINE=FEDERATED - 添加最下面一行:CONNECTION='mysql://用户名:密码@ip:端口/数据库名/表名' 4.结果(此

利用mysql注释实现无硬件成本的审计功能

目前mysql审计功能,大都是通过开启审计插件或者在中间件上吐出日志记录到相应的存储设备上,是可以实现审计功能的,但这些方法都需要额外的存储成本,对于体谅大的公司,也是一笔部小的开销. 目前我们维护的中间件系统,需要具有审计功能,最初的想法是将sql及操作来源记录到第三方系统,但是考虑成本问题.本人想到了利用mysql的注释功能,将操作的来源加入到mysql语句中,这样也实现了一定的审计功能呢. 好处: 注释的sql会记录到binlog(增,删,改操作),慢日志(操过指定时长的全部sql),全日

Mysql数据库存储引擎--转

原文地址:http://pangge.blog.51cto.com/6013757/1303893 简单介绍 存储引擎就是指表的类型.数据库的存储引擎决定了表在计算机中的存储方式.存储引擎的概念是MySQl的特点,而且是一个插入式的存储引擎概念.这就决定了MySQl数据库中的表可以使用不同的存储方式存储.用户可以根据自己的不同要求,选择不同的存储方式.是否进行事务处理等. 查询方式及内容解析 使用SHOW ENGINES语句可以查看MySQL数据库支持的存储引擎类型.查询方法如下: 1 SHOW

Mysql运维管理-MySQL数据库存储引擎知识19

1.MySQL 引擎概述 1.1 什么是存储引擎 我们在录制一个视频文件的时候,可以转换成不同的格式如mp4,avi,wmv等,而且在电脑的磁盘上也会存在于不同类型的文件系统windows里常见的ntfs,fat32,存在于linux操作系统里常见的ext3,ext4,xfs.但是跟我们呈现的内容都是一样的,直观的区别是占用系统空间的大小与清晰程度不一样.那么数据库存储引擎也有很多种存储方式.无论用什么存储引擎来存储,用户看到的数据都是一样的.不同的引擎存储,引擎功能,占用的空间的大小,读取性能