1引擎说明
本地MySQL数据库要访问远程MySQL数据库的表中的数据,必须通过FEDERATED存储引擎来实现.有点类似Oracle中的
数据库链接(DBLINK).要允许这个存储引擎,当构建MySQL时使用--with-federated-storage-engine来configure.
当创建一个FEDERATED表的时候,服务器在数据库目录创建一个表定义文件.文件由表的名字开始,并有一个.frm扩展名.
无其它文件被创建,因为实际的数据在一个远程数据库上.使用FEDERATED表的步骤是非常简单的.通常,运行两个服务器,
要么在同一个主机上,要么在不同主机上.
首先,必须在想要用FEDERATED表访问的远程服务器上有一个表.假设,远程的表在DB_FED数据库中并且被如下定义:
CREATETABLEtest_table(
idint(20)NOTNULLauto_increment,
namevarchar(32)NOTNULLdefault'',
otherint(20)NOTNULLdefault'0',
PRIMARYKEY(id),
KEYname(name),
KEYother_key(other)
)ENGINE=MyISAM;
接着,在本地服务器上为访问远程表创建一个FEDERATED表:
CREATETABLEfederated_table(
idint(20)NOTNULLauto_increment,
namevarchar(32)NOTNULLdefault'',
otherint(20)NOTNULLdefault'0',
PRIMARYKEY(id),
KEYname(name),
KEYother_key(other)
)ENGINE=FEDERATEDCONNECTION='mysql://remote_user@remote_host:9306/db_fed/test_table';
除了ENGINE选项应该是FEDERATED,并且CONNECTION表选项是给FEDERATED指明如何连接到远程服务器上的连接字符串之外,
这个表的结构必须完全与远程表的结构相同.
远程主机信息指明本地服务器要连接到的远程服务器,数据库和表信息指明哪一个远程表要被作为数据文件来用.在这个例子中.
远程服务器被指定来作为远程主机在9306端口上运行,所以要启动服务器,让它监听9306端口.
在CONNECTION选项中的连接字符串的一般形式如下(密码和端口号是可选的):
mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
这里有一些连接字符串的例子:
CONNECTION='mysql://username:password@hostname:port/database/tablename'
CONNECTION='mysql://username@hostname/database/tablename'
CONNECTION='mysql://username:password@hostname/database/tablename'
因为任何被用的密码作为纯文本被存在连接字符串中,它可以被任何使对FEDERATED表使用SHOWCREATETABLE或SHOWTABLESTATUS的用户,或者在INFORMATION_SCHEMA数据库中查询TABLES表的用户看见.
FEDERATED支持及不支持的如下:
·远程服务器必须是一个MySQL服务器.FEDERATED对其它数据库引擎的支持可能会在将来被添加.
·FEDERATED表指向的远程表在通过FEDERATED表访问它之前必须存在.
·一个FEDERATED表指向另一个FEDERATED表是可能的,但是必须小心不要创建一个循环.
·没有对事务的支持.
·如果远程表已经改变,对FEDERATED引擎而言是没有办法知道的.这个的原因是因为这个表必须象数据文件一样工作,
除了数据库其它任何都不会被写入.如果有任何对远程数据库的改变,本地表中数据的完整性可能会被破坏.
·FEDERATED存储引擎支持SELECT,INSERT,UPDATE,DELETE和索引.它不支持ALTERTABLE,DROPTABLE或任何
其它的数据定义语言语句.当前的实现不使用预先准备好的语句.
·执行使用SELECT,INSERT,UPDATE和DELETE,但不用HANDLER.
·FEDERATED表不能对查询缓存不起作用.
这些限制中的一些在FEDERATED处理机的将来版本可能被消除.
2使用示例
MySQL实例A(主机192.168.41.196)下,建立对远程MySQL实例B(主机192.168.41.197)的表db_fed.tab_test访问.
1)MySQL实例B建立测试表
mysql>createdatabasedb_fed;
mysql>usedb_fed
mysql>CREATETABLEtab_test(
idint(20)NOTNULLauto_increment,
namevarchar(32)NOTNULLdefault'',
PRIMARYKEY(id)
)ENGINE=MyISAM;
mysql>insertintotab_testsetname='test1';
mysql>insertintotab_testsetname='测试1';
mysql>select*fromtab_test;
+----+-------+
|id|name|
+----+-------+
|1|test1|
|3|测试1|
+----+-------+
--建立一个用户专门用于远程federated引擎访问,这个用户的权限决定了远程federated表的操作权限:
mysql>grantselectondb_fed.*tou_fed@192.168.41.196identifiedby'iamwangnc';
2)MySQL实例A建立FEDERATED引擎表
--确认FEDERATED引擎已启用:
mysql>showengines;
...
|FEDERATED|YES|FederatedMySQLstorageengine|NO|NO|NO|
...
--如果未启用,先确保configureMySQL时加了--with-federated-storage-engine选项,另外还确保启动mysqld时加了--federated参数,
或者在my.cnf里[mysqld]段后面加了federated参数,如下,然后重启mysqld:
--------------------------------
[mysqld]
federated
--------------------------------
--在某个库下建立FEDERATED引擎表:
mysql>createdatabasedb_test;
mysql>usedb_test
mysql>CREATETABLEtab_test_fed(
idint(20)NOTNULLauto_increment,
namevarchar(32)NOTNULLdefault'',
PRIMARYKEY(id)
)ENGINE=FEDERATEDconnection='mysql://u_fed:iamwangnc@192.168.41.197:3306/db_fed/tab_test';
--测试是否可以访问:
mysql>select*fromtab_test_fed;
+----+-------+
|id|name|
+----+-------+
|1|test1|
|3|测试1|
+----+-------+
--测试是否可以修改:
mysql>deletefromtab_test_fed;
ERROR1296(HY000):Goterror10000'Erroronremotesystem:1142:DROPcommanddeniedtouser'u_fed'@'comp196'
fortable'tab_test''fromFEDERATED
分享到:
相关推荐
MySQL联邦(Federated)引擎是一种特殊的存储引擎,它的设计目标是允许MySQL数据库跨越不同的服务器进行数据集成,类似于Oracle数据库中的DBLINK功能。这个引擎使得用户可以在本地数据库中查询和操作远程MySQL服务器...
【MySQL使用Federated实现类似Oracle的DBLink功能】 MySQL中的Federated存储引擎允许数据库在不同服务器之间透明地操作远程数据,类似于Oracle的DBLink功能。这种特性使得跨数据库系统的数据集成变得简单,尤其在多...
在Linux环境中,若MySQL安装后未包含Federated引擎,可以通过`install plugin federated soname 'ha_federated.so';`命令动态安装。 使用Federated引擎的流程如下: 1. **B库(被调用的数据库)**: - B库需要...
mysql> INSTALL PLUGIN federated SONAME 'ha_federated.so'; ``` 创建FEDERATED表 在服务平台数据库中创建一个名为notifysound的表,表结构如下: ``` CREATE TABLE notifysound ( TINYINT (1), timeoffset CHAR...
在实验中,我们使用 MySQL 8.0 查看了支持的存储引擎,包括 InnoDB、MyISAM、MEMORY、CSV、BLACKHOLE、EXAMPLE、FEDERATED、Archive、Merge 等。不同的存储引擎有不同的特点和使用场景,在选择存储引擎时需要根据...
联邦学习是一种分布式机器学习方法,可对大量分散数据进行模型训练。我们已在TensorFlow的基础上为移动设备领域的联合学习构建了可扩展的生产系统。在本文中,我们描述了由此产生的高级设计,概述了一些挑战及其解决...
MySQL中针对不同的功能需求... 通过这个引擎可以实现类似Oracle 下DBLINK的远程数据访问功能。 使用show engines 命令查看数据库是否已支持FEDERATED引擎: Support 的值有以下几个: YES 支持并开启 DEFAULT 支持
2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过非安装...
在MySQL中,你可以使用MySQL的“FEDERATED”存储引擎,或者通过编写自定义的存储过程和函数来实现与Oracle数据库的连接。另一种常见方法是使用MySQL的连接器,如`mysql-connector-python`,配合Python编程,通过...
- 第二种是在MySQL安装完成后,直接在MySQL客户端运行`INSTALL PLUGIN federated SONAME 'ha_federated.so';`。执行此命令通常能成功安装引擎,但某些旧版本可能报错。 安装完FEDERATED引擎后,还需要在Linux系统...
InnoDB是事务型数据库的首选引擎,为MySQL提供了具有提交、回滚和崩溃恢复能力的事务安全(ACID兼容)存储引擎,其它存储引擎都是非事务安全表,支持行锁定和外键,MySQL5.5以后默认使用InnoDB存储引擎。 ;2.MyISAM
2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过非安装...
2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过非安装...
11.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. 字符串...
11.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. ...
2.2. 使用二进制分发版的标准MySQL安装 2.3. 在Windows上安装MySQL 2.3.1. Windows系统要求 2.3.2. 选择安装软件包 2.3.3. 用自动安装器安装MySQL 2.3.4. 使用MySQL安装向导 2.3.5. 使用配置向导 2.3.6. 通过非安装...
11.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. 字符串...
11.7. 使用来自其他数据库引擎的列类型 12. 函数和操作符 12.1. 操作符 12.1.1. 操作符优先级 12.1.2. 圆括号 12.1.3. 比较函数和操作符 12.1.4. 逻辑操作符 12.2. 控制流程函数 12.3. 字符串函数 12.3.1. ...