您的位置:首页 > Web前端

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

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

【方案】federated+存储过程拉取数据 

【1】FEDERATED的安装

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

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



当前的数据库没有安装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;




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

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


 

【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下面查看存储数据,只有表结构并没有相应的数据


 

【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存储引擎构建表的时候,可以快速实现跨数据库的访问和修改,为一些特殊场景的应用提供了良好的解决办法;

由于是跨主机的访问,所以当表数量级别达到十万以上的时候,整个访问的速度相对本机有很明显的效率问题。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: