本文共 2754 字,大约阅读时间需要 9 分钟。
【前言】数据库之间的跨服务器的访问在实际的工作中经常用到,最常见的是不同数据库的数据比对和数据抽取。针对这个需求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); Query OK, 3 rows affected (0.11 sec)Records: 3 Duplicates: 0 Warnings: 0mysql> 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: 0mysql> 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存储引擎构建表的时候,可以快速实现跨数据库的访问和修改,为一些特殊场景的应用提供了良好的解决办法;
由于是跨主机的访问,所以当表数量级别达到十万以上的时候,整个访问的速度相对本机有很明显的效率问题。
......................................................................................................................................................................………………………………………………………………………………….
本文作者:JOHN,某上市公司DBA,业余时间专注于数据库的技术管理,从管理的角度去运用技术。
技术博客:猎人笔记 数据库技术群:367875324 (请备注数据库类型)
......................................................................................................................................................................…………………………………………………………………………………….
转载地址:http://qjtka.baihongyu.com/