federated存储引擎实现跨服务器的数据访问

【前言】数据库之间的跨服务器的访问在实际的工作中经常用到,最常见的是不同数据库的数据比对和数据抽取。针对这个需求ORACLE可以通过透明网关和DBLINK的方式来满足;MySQL提供了存储引擎federated可以实现该功能;

 

【1】FEDERATED的安装

首先检查数据库当前存储引擎的安装情况,默认的情况下FEDERATED的存储引擎不会随着数据库进行安装的;

1.1 检查数据库当前存储引擎的安装脚本:show engines

image

当前的数据库没有安装FEDERATED;

 

1.2 通过INSTALL PLUGIN的方式安装federated存储引

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

Query OK, 0 rows affected, 1 warning (0.08 sec)

mysql> show engines;

image

显示当前FEDERATED存储引擎已经安装好,但是未启用;

 

1.3 启动FEDERATED存储引擎,修改/etc/my.cnf参数,在[mysqld]下面添加:federated,重启mysql

mysql> show engines
image

 

【2】FEDERATED的使用

当要访问远程的表时,需要在本地的数据库创建一个具有同样表结构使用FEDERATED存储引擎的表,当访问这个表的时候,系统会自动远程访问到远程的数据库表;

 

测试步骤和环境说明|伦理电影

在服务器A 数据库test下面创建表john

mysql>CREATE TABLE `john` (  `id` varchar(32) DEFAULT NULL,UNIQUE KEY `index-123` (`id`) )

ENGINE=InnoDB DEFAULT CHARSET=utf8;

 

mysql> insert into john values(1),(2),(3);
Query OK, 3 rows affected (0.11 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from john;
+------+
| id   |
+------+
| 1    |
| 2    |
| 3    |
+------+

 

在服务器B 数据库test下面创建相应的表federated_john

mysql> CREATE TABLE federated_john (
    ->   `id` varchar(32) DEFAULT NULL,
    ->   UNIQUE KEY `index-123` (`id`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    -> ENGINE=FEDERATED CONNECTION='mysql://root:123456@192.168.47.167:3306/test/john';

 

mysql> select * from federated_john;
+------+
| id   |
+------+
| 1    |
| 2    |
| 3    |
+------+
3 rows in set (0.37 sec) #请注意执行时间

mysql> insert into federated_john values(4),(5),(6);    #可以通过federated_john修改数据
Query OK, 3 rows affected (0.16 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> select * from federated_john;
+------+
| id   |
+------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
| 6    |
+------+
6 rows in set (0.04 sec)

 

在服务器A下面查询

mysql> select * from john;
+------+
| id   |
+------+
| 1    |
| 2    |
| 3    |
| 4    |
| 5    |
| 6    |
+------+
6 rows in set (0.00 sec)   #数据同样被修改;

 

在服务器B下面查看存储数据,只有表结构并没有相应的数据

image

 

【3】连接脚本注意事项,federated连接字符串的格式说明

mysql> CREATE TABLE federated_john (
    ->   `id` varchar(32) DEFAULT NULL,
    ->   UNIQUE KEY `index-123` (`id`)
    -> ) ENGINE=InnoDB DEFAULT CHARSET=utf8
    -> ENGINE=FEDERATED CONNECTION='mysql://root:123456@192.168.47.167:3306/test/john';

其中CONNECTION的格式如下:

mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name

 

【总结】利用federated存储引擎构建表的时候,可以快速实现跨数据库的访问和修改,为一些特殊场景的应用提供了良好的解决办法;

由于是跨主机的访问,所以当表数量级别达到十万以上的时候,整个访问的速度相对本机有很明显的效率问题。

......................................................................................................................................................................………………………………………………………………………………….

本文作者:JOHN,某上市公司DBA,业余时间专注于数据库的技术管理,从管理的角度去运用技术。

技术博客:猎人笔记                                                数据库技术群:367875324 (请备注数据库类型)

......................................................................................................................................................................…………………………………………………………………………………….

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值