MySQL 开启Federated引擎的方法

2022-11-12 09:31:31
内容摘要
这篇文章主要为大家详细介绍了MySQL 开启Federated引擎的方法,具有一定的参考价值,可以用来参考一下。 对此感兴趣的朋友,看看idc笔记做的技术笔记!MySQL中针对不同的功能需求
文章正文

这篇文章主要为大家详细介绍了MySQL 开启Federated引擎的方法,具有一定的参考价值,可以用来参考一下。

对此感兴趣的朋友,看看idc笔记做的技术笔记!

MySQL中针对不同的功能需求提供了不同的存储引擎。所谓的存储引擎也就是MySQL下特定接口的具体实现。FEDERATED是其中一个专门针对远程数据库的实现。一般情况下在本地数据库中建表会在数据库目录中生成相应的表定义文件,并同时生成相应的数据文件。但通过FEDERATED引擎创建的表只是在本地有表定义文件,数据文件则存在于远程数据库中(这一点很重要)。通过这个引擎可以实现类似Oracle 下DBLINK的远程数据访问功能。使用show engines 命令查看数据库是否已支持FEDERATED引擎:Support 的值有以下几个:
YES 支持并开启
DEFAULT 支持并开启, 并且为默认引擎
NO 不支持
DISABLED 支持,但未开启
可以看出MyISAM为当前默认的引擎。使用FEDERATED建表语句如下:CREATE TABLE (......) ENGINE =FEDERATED CONNECTION='mysql://[name]:[pass]@[location]:[port]/[db-name]/[table-name]'创建成功后就可直接在本地查询相应的远程表了。需要注意的几点:1. 本地的表结构必须与远程的完全一样。2.远程数据库目前仅限MySQL3.不支持事务4.不支持表结构修改以下是补充:

参考一下在windows下的解决办法,在my.cnf中增加一行

代码如下:

 
federated 
重启mysql服务后,mysql> show engines;Federated存储引擎可以使你在本地数据库中访问远程数据库中的数据,针对federated存储引擎表的查询会被发送到远程数据库的表上执行,本地是不存储任何数据的。简要介绍后,是不是发现它和Oracle的database link(数据库链接)非常相似,它所实现的功能和db link类似,要在MySQL下找寻db link替代品的,federated存储引擎是不二的选择。

1. 查看当前支持的存储引擎

SQL>show engines;

代码如下:


+------------+---------+------------------------------------------------------------+--------------+------+------------+ 
| Engine | Support | Comment | Transactions | XA | Savepoints | 
+------------+---------+------------------------------------------------------------+--------------+------+------------+ 
| CSV | YES | CSV storage engine | NO | NO | NO | 
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | 
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | 
| InnoDB | DEFAULT | Supports transactions, row-level locking, and foreign keys | YES | YES | YES | 
| MyISAM | YES | Default engine as of MySQL 3.23 with great performance | NO | NO | NO | 
+------------+---------+------------------------------------------------------------+--------------+------+------------+ 
5 rows in set (0.00 sec) 
发现安装MySQL时没有编译进来,只能现安装了。

2. 安装federated存储引擎

由于编译时没有选择federated,所以打算通过INSTALL PLUGIN的方式安装,正常情况下,federated是支持动态安装的: === Federated Storage Engine === Plugin Name: federated Description: Connects to tables on remote MySQL servers Supports build: static and dynamic Configurations: max, max-no-ndb

可是执行以下命令时报错:

SQL>install plugin federated soname 'ha_federated.so';ERROR 1126 (HY000): Can't open shared library '/usr/local/mysql/lib/mysql/plugin/ha_federated.so' (errno: 2 undefined symbol: dynstr_append_mem)搜了一下,发现是个老问题,竟然到现在都没解决,可见MySQL团队的效率和管理的混乱。http://bugs.mysql.com/bug.php?id=40942没有办法了,只有重新编译MySQL源码了, 加上--with-plugins=federated。从5.1.26开始,默认MySQL不启用federated存储引擎,所以需要在my.cnf中加入federated选项或是在命令行用--federated选项启动mysqld。编译后的结果如下:

SQL>show engines;

代码如下:


+------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ 
| Engine | Support | Comment | Transactions | XA | Savepoints | 
+------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ 
| CSV | YES | CSV storage engine | NO | NO | NO | 
| MRG_MYISAM | YES | Collection of identical MyISAM tables | NO | NO | NO | 
| FEDERATED | YES | Federated MySQL storage engine | NO | NO | NO | 
| MyISAM | YES | Default engine as of MySQL 3.23 with great performance | NO | NO | NO | 
| InnoDB | DEFAULT | Percona-XtraDB, Supports transactions, row-level locking, and foreign keys | YES | YES | YES | 
| MEMORY | YES | Hash based, stored in memory, useful for temporary tables | NO | NO | NO | 
+------------+---------+----------------------------------------------------------------------------+--------------+------+------------+ 
6 rows in set (0.00 sec) 
至此,我们已经可以使用federated存储引擎了。

注:关于MySQL 开启Federated引擎的方法的内容就先介绍到这里,更多相关文章的可以留意

代码注释

作者:喵哥笔记

IDC笔记

学的不仅是技术,更是梦想!