FEDERATED存储引擎访问在远程数据库的表中的数据,而不是本地的表。这个特性给某些开发应用带来了遍历,你可以直接在本地构建一个federated表来连接远程数据表,配置好了之后本地表的数据可以直接跟远程数据表同步。实际上这个引擎里面是不真实存放数据的,所需要的数据都是连接到其他MySQL服务器上。
如何配置?
mysql版本需要5.0以上
(1)查看是否安装了federated引擎
show engines;
Engine Support Comment Transactions XA Savepoints
MEMORY YES Hash based, stored in memory, useful for temporary tables NO NO NO
FEDERATED NO Federated MySQL storage engine
MyISAM YES Default engine as of MySQL 3.23 with great performance NO NO NO
BLACKHOLE YES /dev/null storage engine (anything you write to it disappears) NO NO NO
MRG_MYISAM YES Collection of identical MyISAM tables NO NO NO
CSV YES CSV storage engine NO NO NO
ARCHIVE YES Archive storage engine NO NO NO
InnoDB DEFAULT Supports transactions, row-level locking, and foreign keys YES YES YES
从中可以看出federated引擎没有开启
windows下在my.ini中在[mysqld]下直接加上一行 federated ,然后重启mysql服务,即可开启。
(2)建立远程数据表连接
比如:在server1上有数据库db1,其中有个表为table1,然后在server2上有数据库db2,我们要在db2上建立一个表,使其链接到db1上的table1中。那么我们就可以这样创建。
首先保证你要建立的表其结构要与被链接的表结构一模一样
CREATE TABLE table1 (
id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
name varchar(255) not null,
PRIMARY KEY (`id`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://root:123@192.168.88.1:3306/db1/table1'
需要注意的几点:
1. 本地的表结构必须与远程的完全一样。
2.远程数据库目前仅限MySQL
3.不支持事务
4.不支持表结构修改
创建完成之后,你会神奇的发现你当前创建的这个表中已经有远程表里面的所有数据了。
详细的解释可以参看mysql官方文档http://dev.mysql.com/doc/refman/5.1/zh/storage-engines.html#federated-description
MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
15.7. FEDERATED存储引擎
15.7.1. 安装FEDERATED存储引擎
15.7.2. FEDERATED存储引擎的介绍
15.7.3. 如何使用FEDERATED表
15.7.4. FEDERATED存储引擎的局限性
FEDERATED存储引擎访问在远程数据库的表中的数据,而不是本地的表。
FEDERATED存储引擎仅在-MAX版的MySQL上可用。
要为FEDERATED引擎检查源码,请查看MySQL源码分发版的sql目录。
对于FEDERATED存储引擎,在http://forums.mysql.com/list.php?105上有一个专门的论坛。
15.7.1. 安装FEDERATED存储引擎
要允许这个存储引擎,当你构建MySQL时请使用--with-federated-storage-engine来configure。
15.7.2. FEDERATED存储引擎的描述
当你创建一个FEDERATED表的时候,服务器在数据库目录创建一个表定义文件。文件由表的名字开始,并有一个.frm扩展名。无其它表被创建,因为实际的数据在一个远程数据库上。这不同于为本地表工作的存储引擎的方式。
对于本地的数据录表,数据文件是本地的。例如,如果你创建一个名为user的MyISAM表,MyISAM处理器创建一个名为users.MYD的数据文件。对本地表读,插入,删除和更新在本地数据文件里的数据的处理器和记录被以对处理器的特定格式存储。为了读记录,处理器必须把数据分解进列。为了写记录,列值必须被转换到被处理器使用的行格式并且被写进本地的数据文件。
使用MySQL FEDERATED存储引擎,没有对表的本地数据文件(比如,没有.MYD文件)。取而代之地,一个远程数据库存储那些正常地应该在表中的数据。这使得MySQL客户端API来读,删除,更新和插入数据的使用成为必要。数据取回被通过SELECT * FROM tbl_name SQL语句来初始化。要读这个结果,通过使用mysql_fetch_row() C API函数,行被一次取一个,然后从SELECT结果包中的列转换成FEDERATED处理器期望的格式。
基本流程如下:
1. SQL调用被本地发布
2. MySQL处理器API (数据以处理器格式)
3. MySQL客户端API (数据被转换成SQL调用)
4. 远程数据库-> MySQL客户端API
5. 转换结果包(如果有的话)到处理器格式
6. 处理器 API -> 结果行或受行影响的对本地的计数
15.7.3. 如何使用FEDERATED表
使用FEDERATED表的步骤是非常简单的。通常,你运行两个服务器,要么在同一个主机上,要么在不同主机上。(一个FEDERATED表使用其它被同一服务器管理的表也是可能的。虽然只有极少的点要这么做)。
首先,你必须在你想要用FEDERATED表访问的远程服务器上有一个表。假设,远程的表在FEDERATED数据库中并且被如下定义:
CREATE TABLE test_table (
id int(20) NOT NULL auto_increment,
name varchar(32) NOT NULL default '',
other int(20) NOT NULL default '0',
PRIMARY KEY (id),
KEY name (name),
KEY other_key (other)
)
ENGINE=MyISAM
DEFAULT CHARSET=latin1;
ENGINE表选项可能命名任何存储引擎,该表需要不是一个MyISAM表。
接着,在本地服务器上为访问远程表创建一个FEDERATED表:
CREATE TABLE federated_table (
id int(20) NOT NULL auto_increment,
name varchar(32) NOT NULL default '',
other int(20) NOT NULL default '0',
PRIMARY KEY (id),
KEY name (name),
KEY other_key (other)
)
ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://root@remote_host:9306/federated/test_table';
(注意: CONNECTION 替代 用在先前版本的MySQL里的COMMENT)。
除了ENGINE表选项应该是FEDERATED,并且CONNECTION表选项是给FEDERATED指明如何连接到远程服务器上的连接字符串之外,这个表的结构必须完全与远程表的结构相同。
FEDERATED引擎仅创建在已联盟数据库中的test_table.frm文件。
远程主机信息指明本地服务器要连接到的远程服务器,数据库和表信息指明哪一个远程表要被作为数据文件来用。在这个例子中。远程服务器被指定来作为远程主机在9306端口上运行,所以你要启动服务器,让它监听9306端口。
在CONNECTION选项中的连接字符串的一般形式如下:
scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name
只有mysql在这一点被支持为scheme,密码和端口号时可选的。
这里有一些连接字符串的例子:
CONNECTION='mysql://username:password@hostname:port/database/tablename'
CONNECTION='mysql://username@hostname/database/tablename'
CONNECTION='mysql://username:password@hostname/database/tablename'
为指定连接字符串使用CONNECTION是非可选,并且在将来可能会改变。当你使用FEDERATED表的时候,要记得这个,因为这意味着当将来发生那种改变之时,可能被要求。
因为任何被用的密码作为纯文本被存在连接字符串中,它可以被任何使对FEDERATED表使用SHOW CREATE TABLE或SHOW TABLE STATUS的用户,或者在INFORMATION_SCHEMA数据库中查询TABLES表的用户看见。
对于FEDERATED存储引擎,在http://forums.mysql.com/list.php?105上有一个专门的论坛。
15.7.4. FEDERATED存储引擎的局限性
FEDERATED支持及不支持的如下:
· 在第一个版本中,远程服务器必须是一个MySQL服务器。FEDERATED对其它数据库引擎的支持可能会在将来被添加。
· FEDERATED表指向的远程表在你通过FEDERATED表访问它之前必须存在。
· 一个FEDERATED表指向另一个FEDERATED表是可能的,但是你必须小心不要创建一个循环。
· 没有对事务的支持。
· 如果远程表已经改变,对FEDERATED引擎而言是没有办法知道的。这个的原因是因为这个表必须象数据文件一样工作,除了数据库其它任何都不会被写入。如果有任何对远程数据库的改变,本地表中数据的完整性可能会被破坏。
· FEDERATED存储引擎支持SELECT, INSERT, UPDATE, DELETE和索引。它不支持ALTER TABLE, DROP TABLE或任何其它的数据定义语言语句。当前的实现不使用预先准备好的语句。
· 执行使用SELECT, INSERT, UPDATE和DELETE,但不用HANDLER。
· FEDERATED表不能对查询缓存不起作用。
这些限制中的一些在FEDERATED处理机的将来版本可能被消除。
相关推荐
- Federated存储引擎允许在不同服务器之间分布数据,一个表可以是一个远程服务器上的表的映射,适合分布式环境。 7. **CSV** - CSV存储引擎将数据存储为逗号分隔值格式,便于与其他系统交换数据。 8. **...
- **Federated存储引擎**:允许远程数据访问,如同本地表一样操作。 了解和选择合适的存储引擎对于优化MySQL数据库性能至关重要。例如,对于需要事务处理、数据一致性和高并发的在线业务,InnoDB是理想选择;而...
Federated 存储引擎不存储数据,它指向一台远程 MySQL 数据库上的表。 ### 1.3.7 Maria 存储引擎 Maria 存储引擎是 MyISAM 的后续版本,支持缓存数据和索引,行锁设计,支持 MVCC,支持事务和非事务安全的选项,...
但通过Federated存储引擎,MySQL可以实现跨数据库的数据访问,从而达到与Oracle的DBLINK相似的效果。 Federated存储引擎允许MySQL在一个服务器上访问远程服务器上的表,仿佛这些表是本地表一样。在使用Federated...
在实验中,我们使用 MySQL 8.0 查看了支持的存储引擎,包括 InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、EXAMPLE、FEDERATED、Archive、Merge 等。不同的存储引擎有不同的特点和使用场景,在选择存储引擎时需要根据...
MySQL中的Federated存储引擎允许数据库在不同服务器之间透明地操作远程数据,类似于Oracle的DBLink功能。这种特性使得跨数据库系统的数据集成变得简单,尤其在多系统交互或分布式环境中非常有用。 **1. Oracle的...
MySQL 5.7支持的存储引擎有:InnoDB、MyISAM、Memory、Merge、Archive、Federated、CSV和BLACKHOLE等。 可以利用语句:show engines; 查看系统所支持的引擎类型。;1.InnoDB存储引擎 InnoDB是事务型数据库的首选引擎...
### MySQL插件式存储引擎体系结构详解 #### 一、概述 MySQL的插件式存储引擎体系结构是一种灵活的设计模式,允许用户根据具体的应用场景选择最适合的存储引擎。这一架构的最大优势在于它允许应用程序和数据库管理...
Federated存储引擎可以访问远程MySQL服务器上的表。 ### 面试题解析 #### 1. MySQL存储引擎有哪些? 可以通过MySQL命令行工具查看所有可用的存储引擎: ```sql SHOW ENGINES; ``` MySQL常用的存储引擎包括:...
Federated存储引擎允许MySQL查询其他MySQL实例上的数据,适用于分布式数据库环境。设置此选项为1表示编译时会包含Federated存储引擎的支持。 ##### 2.9 `-DWITH_PARTITION_STORAGE_ENGINE=1` 启用Partition存储...
MySQL联邦(Federated)引擎是一种特殊的存储引擎,它的设计目标是允许MySQL数据库跨越不同的服务器进行数据集成,类似于Oracle数据库中的DBLINK功能。这个引擎使得用户可以在本地数据库中查询和操作远程MySQL服务器...
FEDERATED引擎是MySQL中的一种存储引擎,用于实现分布式数据库系统中的数据同步。下面是使用FEDERATED引擎实现数据库用户表同步的详细知识点: 什么是FEDERATED引擎 FEDERATED引擎是一种插件式存储引擎,用于实现...
在MySQL中,通过Federated存储引擎可以实现一个MySQL服务器(服务器B)访问另一个MySQL服务器(服务器A)的数据表。这种机制允许用户在不复制数据的情况下,直接查询远程数据库中的数据。 **Federated引擎特点**: ...
MySQL支持多种存储引擎,如InnoDB、MyISAM、BDB、MEMORY、MERGE、EXAMPLE、NDB Cluster、ARCHIVE、CSV、BLACKHOLE、FEDERATED等。 InnoDB是MySQL5.5之后的默认存储引擎,提供了具有提交、回滚和崩溃恢复能力的事务...
除了InnoDB和MyISAM之外,MySQL还支持多种其他的存储引擎,如Memory、Archive、Federated等,这些引擎各有特色,可以满足不同的业务需求。 #### 四、存储引擎选择 选择合适的存储引擎对于保证数据库性能和稳定性至...
MySQL 提供了多种存储引擎,包括 InnoDB、MRG_MYISAM、MEMORY、BLACKHOLE、MyISAM、CSV、ARCHIVE、PERFORMANCE_SCHEMA、FEDERATED 等。可以使用 `show engines;` 或 `show engines \G;` 语句来查看 MySQL 提供的存储...
- **Federated存储引擎**:允许用户通过Federated存储引擎访问远程服务器上的数据表,实现跨数据库操作。 #### 2. 查询优化器改进 - **半连接优化**:对于涉及多个表的复杂查询,5.1版本引入了半连接优化技术,极...
MySQL存储引擎是数据库管理系统的核心组件,它决定了数据如何在MySQL中存储、检索和管理。不同的存储引擎具有不同的特性和用途,以适应各种应用场景。在MySQL中,存储引擎主要负责数据的物理存储方式、事务处理、...
MySQL 是一款广泛应用于各行业的开源关系型数据库管理系统,其核心特性之一是可插拔的存储引擎。这个设计允许用户根据具体应用需求选择最适合的存储引擎,以优化性能和功能。MySQL 的存储引擎在数据存储、索引技术、...