MySQL中針對不一樣的功能需求提供了不一樣的存儲引擎。所謂的存儲引擎也就是MySQL下特定接口的具體實現。php
FEDERATED是其中一個專門針對遠程數據庫的實現。通常狀況下在本地數據庫中建表會在數據庫目錄中生成相應的表定義文件,並同時生成相應的數據文件。
但經過FEDERATED引擎建立的表只是在本地有表定義文件,數據文件則存在於遠程數據庫中(這一點很重要)。mysql
經過這個引擎能夠實現相似Oracle 下DBLINK的遠程數據訪問功能。sql
使用show engines 命令查看數據庫是否已支持FEDERATED引擎:數據庫
Support 的值有如下幾個:windows
YES 支持並開啓
DEFAULT 支持並開啓, 而且爲默認引擎
NO 不支持
DISABLED 支持,但未開啓app
能夠看出MyISAM爲當前默認的引擎。
使用FEDERATED建表語句以下:
CREATE TABLE (......) ENGINE =FEDERATED CONNECTION='mysql://[name]:[pass]@[location]:[port]/[db-name]/[table-name]'
建立成功後就可直接在本地查詢相應的遠程表了。ide
須要注意的幾點:ui
1. 本地的表結構必須與遠程的徹底同樣。
2.遠程數據庫目前僅限MySQL
3.不支持事務
4.不支持表結構修改命令行
如下是補充:orm
參考一下在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存儲引擎了。