FEDERATED 存储引擎描述

FEDERATED存储引擎能让你访问远程的MySQL数据库而不使用replication或cluster技术(类似于Oracle的dblink),使用FEDERATED存储引擎的表,本地只存储表的结构信息,数据都存放在远程数据库上,查询时通过建表时指定的连接符去获取远程库的数据返回到本地。
FEDERATED存储引擎默认不启用
如果是使用的源码,需要使用CMake 加上DWITH_FEDERATED_STORAGE_ENGINE选项。
如果是二进制包,则在启动MySQL时指定 [--federated] 选项开启或在my.cnf文件中的[mysqld]部分加上federated参数

FEDERATED 存储引擎架构

 本地服务器 FEDERATED 存储引擎的表只存放表的.frm结构文件
远程服务器 存放了.frm和数据文件
增删改查操作都是通过建立的连接来访问远程数据库进行操作,把结果返回给本地。
4 远程数据表的存储引擎为MySQL支持的存储引擎,如MyISAM,InnoDB等

FEDERATED 存储引擎操作步骤

操作步骤:
远程库:
开启 FEDERATED 存储引擎
建立远程访问用户
授予访问对象的权限
本地库:
测试登陆远程库是否能成
创建 FEDERATED 表
查询是否成功

远程库

开启 FEDERATED 存储引擎

(root@localhost) [(none)]>select engine,support from information_schema.engines where engine='FEDERATED';
+-----------+---------+
| engine | support |
+-----------+---------+
| FEDERATED | YES |
+-----------+---------+
1 row in set (0.00 sec)

--也可使用show engines查看支持的存储引擎

(root@localhost) [(none)]>show engines;  --排版问题不贴出执行结果

--如果support 为NO,则需要在my.cnf中[mysqld]增加federated参数,并重启MySQL服务器生效配置

建立远程访问用户并授权

(root@localhost) [(none)]>select user,host from mysql.user;   --查看数据库用户
+-----------+-----------+
| user | host |
+-----------+-----------+
| root | % |
| mysql.sys | localhost |
| root | localhost |
+-----------+-----------+
3 rows in set (0.00 sec) (root@localhost) [(none)]>create user 'fed'@'%' identified by 'fed_test'; --创建一个federated连接的用户
Query OK, 0 rows affected (0.00 sec) (root@localhost) [(none)]>grant all on employees.* to 'fed'@'%'; --授予创建的fed用户访问employees数据库所有表的权限
Query OK, 0 rows affected (0.00 sec) (root@localhost) [(none)]>select user,host from mysql.user; --查看用户信息
+-----------+-----------+
| user | host |
+-----------+-----------+
| fed | % |
| root | % |
| mysql.sys | localhost |
| root | localhost |
+-----------+-----------+
4 rows in set (0.00 sec) (root@localhost) [(none)]>show grants for 'fed'@'%'; --查看用户权限
+----------------------------------------------------+
| Grants for fed@% |
+----------------------------------------------------+
| GRANT USAGE ON *.* TO 'fed'@'%' |
| GRANT ALL PRIVILEGES ON `employees`.* TO 'fed'@'%' |
+----------------------------------------------------+
2 rows in set (0.00 sec)

本地库

测试登陆远程库是否能成

[root@RHEL6 ~]# mysql -ufed -h172.25.21.10 -P3306 -p   --在本地服务器上去连接远程库
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 23
Server version: 5.7.10-log MySQL Community Server (GPL)
Copyright (c) 2000, 2014, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. fed@172.25.21.10 [(none)]> --成功通过远程机新建的用户登录上远程数据库 --如果没有连接成功
  判断是否防火墙的问题
查看端口是否正确

创建本地 FEDERATED 表

root@localhost [(none)]>create database test;    --在本地创建一个数据库,也可使用已存在的数据库
Query OK, 1 row affected (0.01 sec) root@localhost [(none)]>use test; --使用新建的数据库
Database changed
root@localhost [test]>CREATE TABLE `employees_fed` (
-> `emp_no` int(11) NOT NULL,
-> `birth_date` date NOT NULL,
-> `first_name` varchar(14) NOT NULL,
-> `last_name` varchar(16) NOT NULL,
-> `gender` enum('M','F') NOT NULL,
-> `hire_date` date NOT NULL,
-> PRIMARY KEY (`emp_no`)
-> ) ENGINE=federated DEFAULT CHARSET=utf8mb4
-> connection='mysql://fed:fed_test@172.25.21.10:3306/employees/employees';
Query OK, 0 rows affected (0.00 sec) connection语法:
scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name

具体语法及含义参考官方文档链接:
http://dev.mysql.com/doc/refman/5.7/en/federated-create-connection.html --创建完成federated存储引擎的表,注意:本地表employees_fed的结构要和远程表employees一样,可以提前在远程表中通过show create table table_name来获取表结构并修改或增加标红的语句。

验证是否配置成功

root@localhost [test]>select * from employees_fed limit 10;    --成功获取到远程数据库中的数据
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date |
+--------+------------+------------+-----------+--------+------------+
| 10001 | 1953-09-02 | Georgi | Facello | M | 1986-06-26 |
| 10002 | 1964-06-02 | Bezalel | Simmel | F | 1985-11-21 |
| 10003 | 1959-12-03 | Parto | Bamford | M | 1986-08-28 |
| 10004 | 1954-05-01 | Chirstian | Koblick | M | 1986-12-01 |
| 10005 | 1955-01-21 | Kyoichi | Maliniak | M | 1989-09-12 |
| 10006 | 1953-04-20 | Anneke | Preusig | F | 1989-06-02 |
| 10007 | 1957-05-23 | Tzvetan | Zielinski | F | 1989-02-10 |
| 10008 | 1958-02-19 | Saniya | Kalloufi | M | 1994-09-15 |
| 10009 | 1952-04-19 | Sumant | Peac | F | 1985-02-18 |
| 10010 | 1963-06-01 | Duangkaew | Piveteau | F | 1989-08-24 |
+--------+------------+------------+-----------+--------+------------+
10 rows in set (0.36 sec)
root@localhost [test]>show variables like 'datadir';   --查看数据文件存放目录
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec) root@localhost [test]>system ls -l /var/lib/mysql/test/*
-rw-rw----. 1 mysql mysql 61 Mar 30 13:41 /var/lib/mysql/test/db.opt
-rw-rw----. 1 mysql mysql 8768 Mar 30 13:41 /var/lib/mysql/test/employees_fed.frm --确定本地只保存了表的结构信息 --配置成功

使用 CREATE SERVER 方式创建 FEDERATED表

--创建一个server

root@localhost [test]>CREATE SERVER emp_link
-> FOREIGN DATA WRAPPER mysql
-> OPTIONS (USER 'fed', PASSWORD 'fed_test',HOST '172.25.21.10',PORT 3306,DATABASE 'employees'); CREATER SERVER语法:
CREATE SERVER server_name
FOREIGN DATA WRAPPER wrapper_name
OPTIONS (option [, option] ...)

具体语法及含义参考官方文档链接:
http://dev.mysql.com/doc/refman/5.7/en/federated-create-server.html
--查看已创建的server

root@localhost [test]>select * from mysql.servers\G;
*************************** 1. row ***************************
Server_name: emp_link
Host: 172.25.21.10
Db: employees
Username: fed
Password: fed_test
Port: 3306
Socket:
Wrapper: mysql
Owner:
1 row in set (0.00 sec)

 

创建基于SERVER 的FEDERATED表

root@localhost [test]>CREATE TABLE `employees_link` (
-> `emp_no` int(11) NOT NULL,
-> `birth_date` date NOT NULL,
-> `first_name` varchar(14) NOT NULL,
-> `last_name` varchar(16) NOT NULL,
-> `gender` enum('M','F') NOT NULL,
-> `hire_date` date NOT NULL,
-> PRIMARY KEY (`emp_no`)
-> ) ENGINE=FEDERATED DEFAULT CHARSET=utf8mb4
-> CONNECTION='emp_link/employees';
Query OK, 0 rows affected (0.01 sec)

验证是否配置成功

root@localhost [test]>select * from employees_link limit 10;
+--------+------------+------------+-----------+--------+------------+
| emp_no | birth_date | first_name | last_name | gender | hire_date |
+--------+------------+------------+-----------+--------+------------+
| 10001 | 1953-09-02 | Georgi | Facello | M | 1986-06-26 |
| 10002 | 1964-06-02 | Bezalel | Simmel | F | 1985-11-21 |
| 10003 | 1959-12-03 | Parto | Bamford | M | 1986-08-28 |
| 10004 | 1954-05-01 | Chirstian | Koblick | M | 1986-12-01 |
| 10005 | 1955-01-21 | Kyoichi | Maliniak | M | 1989-09-12 |
| 10006 | 1953-04-20 | Anneke | Preusig | F | 1989-06-02 |
| 10007 | 1957-05-23 | Tzvetan | Zielinski | F | 1989-02-10 |
| 10008 | 1958-02-19 | Saniya | Kalloufi | M | 1994-09-15 |
| 10009 | 1952-04-19 | Sumant | Peac | F | 1985-02-18 |
| 10010 | 1963-06-01 | Duangkaew | Piveteau | F | 1989-08-24 |
+--------+------------+------------+-----------+--------+------------+
10 rows in set (0.35 sec)
--配置成功
--这种方式的好处在于创建本地FEDERATED表时,在connection中直接指定已经创建好的server link,不需要每次都配置一个新的连接。
--并且便于统一管理,只需要修改server link即可

FEDERATED 引擎使用注意事项

1、FEDERATED 表可能会被复制到其他的slave数据库,你需要确保slave服务器也能够使用定义在connection中或mysql.servers表中的link的用户名/密码 连接上远程服务器。

2、远程服务器必须是MySQL数据库

3、在访问FEDERATED表中定义的远程数据库的表前,远程数据库中必须存在这张表。

4、FEDERATED 表不支持通常意义的索引,服务器从远程库获取所有的行然后在本地进行过滤,不管是否加了where条件或limit限制。

  --查询可能造成性能下降和网络负载,因为查询返回的数据必须存放在内存中,所以容易造成使用系统的swap分区或挂起。

5、FEDERATED表不支持字段的前缀索引

6、FEDERATED表不支持ALTER TABLE语句或者任何DDL语句

7、FEDERATED表不支持事务

8、本地FEDERATED表无法知道远程库中表结构的改变

9、任何drop语句都只是对本地库的操作,不对远程库有影响

详细信息链接:

http://dev.mysql.com/doc/refman/5.7/en/federated-usagenotes.html

MySQL FEDERATED 存储引擎的使用的更多相关文章

  1. MySQL FEDERATED 存储引擎

    MySQL中针对不同的功能需求提供了不同的存储引擎.所谓的存储引擎也就是MySQL下特定接口的具体实现. FEDERATED是其中一个专门针对远程数据库的实现.一般情况下在本地数据库中建表会在数据库目 ...

  2. MySQL 远程连接(federated存储引擎)

    标签:federated存储引擎 概述 本文主要介绍通过federated存储引擎建立远程连接表 测试环境:mysql 5.6.21 步骤 开启federated存储引擎 先查看federated存储 ...

  3. 【3.3】mysql中的Federated存储引擎,远程表,相当于sql server的linked server

    MySQL中针对不同的功能需求提供了不同的存储引擎.所谓的存储引擎也就是MySQL下特定接口的具体实现. FEDERATED是其中一个专门针对远程数据库的实现.一般情况下在本地数据库中建表会在数据库目 ...

  4. 详细介绍Mysql各种存储引擎的特性以及如何选择存储引擎

    最近业务上有要求,要实现类似oracle 的dblink   linux版本 Server version: 5.6.28-0ubuntu0.14.04.1 (Ubuntu) 修改配置文件 /etc/ ...

  5. 通过FEDERATED存储引擎跨实例访问数据

    通过FEDERATED存储引擎同步两实例间的表数据需求情景:实例1中A库中的三个视图是实例2中的B库所依赖的,B需要A库中三个视图的实时数据.方案:通过FEDERATED来完成跨势力的查询FEDERA ...

  6. MySQL常用存储引擎及如何选择

    一.MySQL的存储引擎 完整的引擎说明还是看官方文档:http://dev.mysql.com/doc/refman/5.6/en/storage-engines.html 这里介绍一些主要的引擎 ...

  7. mysql数据库存储引擎及区别

    MySQL有多种存储引擎,每种存储引擎有各自的优缺点,可以择优选择使用:MyISAM.InnoDB.MERGE.MEMORY(HEAP).BDB(BerkeleyDB).EXAMPLE.FEDERAT ...

  8. mysql之存储引擎和文件配置

    (查看系统服务,在运行里输入services.msc) 补充:将mysql做成系统服务:mysqld --install 取消:mysqld --romove 在服务中可以直接鼠标操作mysql服务的 ...

  9. MySQL之存储引擎(表类型)的选择

    和大部分的数据库不同,MySQL中有一个存储引擎的概念,用户可以根据数据存储的需求来选择不同的存储引擎.本次博客就来介绍一下MySQL中的存储引擎.MySQL版本 5.7.19. 概述 MySQL的存 ...

随机推荐

  1. bug最后汇总-2018/08/03

    一.对于点击后请求时间过长的按钮 现象:容易给用户点击无效的错觉,从而导致多次点击,从而发出多个相同请求,这显然是不符合我们意愿的 解决: 用户点击发出多个请求:加个锁,当用户点击后,将锁关闭,使用户 ...

  2. 【笔记】Maven使用入门

    参考<maven实战> 1.编写POM 2.编写主代码 3.编写测试代码 4.打包和运行 具体如下: 1.编写POM. <!-- XML头,指定了该xml文档的版本和编辑方式 --& ...

  3. java鲁棒性(健壮性)

    java能检测编译和运行时的错误 java自己操作内存减少了内存出错的可能 java实现了真数组,避免了覆盖数据的可能 Java不支持指针操作,大大减少了错误发生的可能性 ... 备注: Java能运 ...

  4. 广度优先搜索 BFS算法

    广度优先搜索算法(Breadth-First-Search,BFS),又称作宽度优先搜索.BFS算法是从根节点开始,沿着树的宽度遍历树的节点.如果所有节点均被访问,则算法中止. 算法思想 1.首先将根 ...

  5. apache kafka配置中request.required.acks含义

    Kafka producer的ack有3中机制,初始化producer时的producerconfig可以通过配置request.required.acks不同的值来实现. 0:这意味着生产者prod ...

  6. java中int i 会出现i+1i吗

    Java中int是32,范围是-2147483648到2147483647 所以i+1 < i 或者 i-1 > i是会出现的. int i=(int) Math.pow(2, 32); ...

  7. C++(十六) — 类中引用成员函数、命名空间的使用

    1.为什么类中引用成员函数? 类将属性和方法做了封装.类是一种数据类型,也就是:固定大小内存块的别名. 类的定义是一个抽象的概念,定义时不分配内存,当用类定义对象时,才分配一个固定大小的内存块. 此时 ...

  8. Ajax-07 基于Ajax实现跨域请求

    跨域 跨域名访问,如c1.com域名向c2.com域名发送请求 本质:浏览器存在同源策略机制,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. django服务端准备 url. ...

  9. Ajax-06 Ajax数据交换格式

    1.数据交换格式 服务端返回的数据,在本质上都是字符串,只是原生Ajax 或jQuery Ajax将这些字符串转换为容易理解的各种常用格式. a. Text 文本字符串 b.  XML JavaScr ...

  10. zzuli 2172 队列优化dp

    2172: GJJ的日常之购物 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 9  Solved: 8 SubmitStatusWeb Board De ...