【前言】数据库之间的跨服务器的访问在实际的工作中经常用到,最常见的是不同数据库的数据比对和数据抽取。针对这个需求ORACLE可以通过透明网关和DBLINK的方式来满足;MySQL提供了存储引擎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); mysql> select * from john; |
在服务器B 数据库test下面创建相应的表federated_john
mysql> CREATE TABLE federated_john (
mysql> select * from federated_john; mysql> insert into federated_john values(4),(5),(6); #可以通过federated_john修改数据 mysql> select * from federated_john; |
在服务器A下面查询
mysql> select * from john; |
在服务器B下面查看存储数据,只有表结构并没有相应的数据
【3】连接脚本注意事项,federated连接字符串的格式说明
mysql> CREATE TABLE federated_john ( |
其中CONNECTION的格式如下:
mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
【总结】利用federated存储引擎构建表的时候,可以快速实现跨数据库的访问和修改,为一些特殊场景的应用提供了良好的解决办法;
由于是跨主机的访问,所以当表数量级别达到十万以上的时候,整个访问的速度相对本机有很明显的效率问题。
......................................................................................................................................................................………………………………………………………………………………….
本文作者:JOHN,某上市公司DBA,业余时间专注于数据库的技术管理,从管理的角度去运用技术。
技术博客:猎人笔记 数据库技术群:367875324 (请备注数据库类型)
......................................................................................................................................................................…………………………………………………………………………………….