由於業務需要,數據庫服務器需要跨服務器查詢其他數據庫上的一些表,而FEDERATED可以滿足這個功能。MySQL中針對不同的功能需求提供了不同的存儲引擎。所謂的存儲引擎也就是MySQL下特定接口的具體實現。FEDERATED是其中一個專門針對遠程數據庫的實現。一般情況下在本地數據庫中建表會在數據庫目錄中生成相應的表定義文件,並同時生成相應的數據文件。但通FEDERATED引擎創建的表只是在本地有表定義文件,數據文件則存在於遠程數據庫中(這一點很重要)。
當然,該方式有幾個特點:
1、本地的表結構必須與遠程的完全一樣。
2、遠程數據庫目前僅限於MySQL
3、不支持事務
4、不支持表結構修改
一、查看數據庫支持的引擎:
數據庫版本:
由於開始編譯的mysql不支持FEDERATED引擎。
接下來需要添加FEDERATED。
查看mysql安裝目錄下的擴展中是否有ha_federated.so文件,如下圖所示:
我這上面是有的,接下來進入mysql,安裝擴展。
mysql> install plugin federated soname 'ha_federated.so';
可以看到現在已經顯示了FEDERATED引擎,接下來就是啓用一下了。
# vim /etc/my.cnf
在[mysqld] 段裏添加federated即可,重啓mysql服務即可。
進入mysql,使用SHOW ENGINES;查看即可。
現在可以看出,已經支持了FEDERATED引擎。
接下來創建測試數據庫和表,並插入數據:
我在其他數據庫(192.168.158.217)上創建測試數據庫和表
mysql> CREATE DATABASE testdb;
mysql> CREATE TABLE testdb(ID int,NAME VARCHAR(20));
mysql> INSERT INTO testdb VALUE (1,'luowei1');
mysql> INSERT INTO testdb VALUE (2,'luowei2');
mysql> INSERT INTO testdb VALUE (3,'luowei3');
我測試數據庫是192.168.158.218,接下來開始測試了。
mysql> CREATE DATABASE testdb_218;
mysql> use testdb_218;
mysql> CREATE TABLE testdb(ID int,NAME VARCHAR(20)) ENGINE=federated connection='mysql://baison:[email protected]:3306/testdb/testdb'DEFAULT CHARSET=utf8;
現在查看新建表的數據:
可以看到剛建立的表中添加的數據,在這裏已經顯示了。
接下來再在217上插入一條記錄:
mysql> INSERT INTO testdb VALUE (4,'luowei4');
然後在218上查看一下:
可以看出217上的更新已經更新到了218上了,和同步有點類似。
到此配置結束。