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存储引
显示当前FEDERATED存储引擎已经安装好,但是未启用;
1.3 启动FEDERATED存储引擎,修改/etc/my.cnf参数,在[mysqld]下面添加:federated,重启mysql
【2】FEDERATED的使用
当要访问远程的表时,需要在本地的数据库创建一个具有同样表结构使用FEDERATED存储引擎的表,当访问这个表的时候,系统会自动远程访问到远程的数据库表;
测试步骤和环境说明
在服务器A 数据库test下面创建表john
在服务器B 数据库test下面创建相应的表federated_john
在服务器A下面查询
在服务器B下面查看存储数据,只有表结构并没有相应的数据
【3】连接脚本注意事项,federated连接字符串的格式说明
其中CONNECTION的格式如下:
mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
【总结】利用federated存储引擎构建表的时候,可以快速实现跨数据库的访问和修改,为一些特殊场景的应用提供了良好的解决办法;
由于是跨主机的访问,所以当表数量级别达到十万以上的时候,整个访问的速度相对本机有很明显的效率问题。
【方案】federated+存储过程拉取数据
【1】FEDERATED的安装
首先检查数据库当前存储引擎的安装情况,默认的情况下FEDERATED的存储引擎不会随着数据库进行安装的;
1.1 检查数据库当前存储引擎的安装脚本:show engines
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; |
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 | +------+ |
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) |
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'; |
mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
【总结】利用federated存储引擎构建表的时候,可以快速实现跨数据库的访问和修改,为一些特殊场景的应用提供了良好的解决办法;
由于是跨主机的访问,所以当表数量级别达到十万以上的时候,整个访问的速度相对本机有很明显的效率问题。
相关文章推荐
- javascript - 内置对象 String/Date/Array/Math
- html一些总结
- js学习之路--2
- ByteBuffer详解
- sass调试--页面看到sass文件而不是css文件问题
- jQuery EasyUI基础教程之EasyUI常用组件(推荐)
- 关于HTML标签的反转义函数
- js中控制Html元素
- 为什么JSP渲染比常用模板(freemarker\Velcoity\beetl)慢
- Html5画布绘制七巧板
- js入门必读--和你分享js的学习之路1
- How to Report Bugs Effectively 摘录
- jquery编写选项卡
- 剑指Offer--065-滑动窗口的最大值
- HTML/CSS 自定义开关按钮控件(switch)样式
- jquery原生操作和链式操作
- jquery函数写法和js比较
- ReactNative源码笔记——你知道几条?
- jquery取值和赋值
- Caffe框架一些易忽略的细节