Mysql 开启Federated引擎的方法

 更新时间:2012年12月16日 13:21:43   作者:  
FEDERATED是其中一个专门针对远程数据库的实现。一般情况下在本地数据库中建表会在数据库目录中生成相应的表定义文件,并同时生成相应的数据文件
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.远程数据库目前仅限MySQL
3.不支持事务
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子查询中order by不生效问题的解决方法

    MySQL子查询中order by不生效问题的解决方法

    ORDER BY 语句用于根据指定的列对结果集进行排序,在日常工作中经常会用到,这篇文章主要给大家介绍了关于MySQL子查询中order by不生效问题的解决方法,需要的朋友可以参考下
    2021-07-07
  • 关于SQL建表语句使用详解

    关于SQL建表语句使用详解

    在SQL数据库设计中,创建表是基本操作,涉及定义表结构,包括列名、数据类型和约束等,本文详细介绍建表语句,通过示例帮助理解,常见数据类型包括整数、浮点数、字符串、日期时间等,约束确保数据完整性,包括主键、唯一、非空、默认值、外键和检查约束
    2024-10-10
  • 关于SQL语句中的AND和OR执行顺序遇到的问题

    关于SQL语句中的AND和OR执行顺序遇到的问题

    在SQL语句中的AND和OR执行顺序中我们经常会遇到一些问题,下面有简单的解决方法,小编来和大家一起来看看
    2019-05-05
  • 使用mysqldump对MySQL的数据进行备份的操作教程

    使用mysqldump对MySQL的数据进行备份的操作教程

    这篇文章主要介绍了使用mysqldump对MySQL的数据进行备份的操作教程,示例环境基于CentOS操作系统,需要的朋友可以参考下
    2015-12-12
  • Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架

    Mysql limit 优化,百万至千万级快速分页 复合索引的引用并应用于轻量级框架

    MySql 性能到底能有多高?用了php半年多,真正如此深入的去思考这个问题还是从前天开始。有过痛苦有过绝望,到现在充满信心!
    2011-06-06
  • ADODB 入门

    ADODB 入门

    ADODB 入门...
    2006-12-12
  • MySql约束超详细介绍

    MySql约束超详细介绍

    MySQL唯一约束(Unique Key)是指所有记录中字段的值不能重复出现。例如,为 id 字段加上唯一性约束后,每条记录的 id 值都是唯一的,不能出现重复的情况
    2022-09-09
  • 20分钟MySQL基础入门

    20分钟MySQL基础入门

    这篇文章主要为大家分享了20分钟MySQL基础入门教程,快速掌握MySQL基础知识,真正了解MySQL,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • Mysql命令行导出SQL文件和导入文件详细步骤

    Mysql命令行导出SQL文件和导入文件详细步骤

    这篇文章主要给大家介绍了关于Mysql命令行导出SQL文件和导入文件的详细步骤,在MySQL中,导入SQL文件是一个常见的操作,它可以帮助我们快速地恢复数据库、迁移数据或者备份数据,需要的朋友可以参考下
    2024-05-05
  • Mysql数据库之约束条件详解

    Mysql数据库之约束条件详解

    本文介绍了数据库表中的主键约束、非空约束、唯一约束、默认值约束和外键约束,并举例说明了如何在创建表和修改表时设置这些约束
    2025-01-01

最新评论