MySQL FEDERATED儲存引擎

2021-07-09 22:24:39 字數 4596 閱讀 7818

federated儲存引擎的描述

mysql 提供了乙個類似oracle中的資料庫鏈結(dblink)功能的儲存引擎--federated。當我們建立乙個以federated為儲存引擎的表時,伺服器在資料庫目錄只建立乙個表定義檔案。檔案由表的名字開始,並有乙個frm副檔名。無其它檔案被建立,因為實際的資料在乙個遠端資料庫上。這不同於為本地表工作的儲存引擎的方式。

如何使用federated儲存引擎

create table federated_table (

id     int(20) not null auto_increment,

name   varchar(32) not null default '',

other  int(20) not null default '0',

primary key  (id),

key name (name),

key other_key (other) )

engine=federated default charset=latin1 

connection='mysql://root@remote_host:9306/federated/test_table';

除了engine表選項應該是federated,並且connection表選項是給federated指明如何連線到遠端伺服器上的連線字串之外, 這個表的結構必須完全與遠端表的結構相同。

federated引擎僅建立在本地資料庫中的fed_tab.frm檔案。

在connection選項中的連線字串的一般形式如下:

scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name

只有mysql在這一點被支援為scheme,密碼和埠號時可選的。

這裡有一些連線字串的例子:

connection='mysql://username:password@hostname:port/database/tablename'

connection='mysql://username@hostname/database/tablename'

connection='mysql://username:password@hostname/database/tablename'

為指定連線字串使用connection是非可選,並且在將來可能會改變。當你使用federated表的時候,要記得這個,因為這意味著當將來發生那種改變之時,可能被要求。

因為任何被用的密碼作為純文字被存在連線字串中,它可以被任何使對federated表使用show create table或show table status的使用者,或者在information_schema資料庫中查詢tables表的使用者看見。

federated儲存引擎的侷限性

·在第乙個版本中,遠端伺服器必須是乙個mysql伺服器。federated對其它資料庫引擎的支援可能會在將來被新增。

·federated表指向的遠端表在你通過federated表訪問它之前必須存在。

·乙個federated表指向另乙個federated表是可能的,但是你必須小心不要建立乙個迴圈。

·沒有對事務的支援。

·如果遠端表已經改變,對federated引擎而言是沒有辦法知道的。這個的原因是因為這個表必須象資料檔案一樣工作,除了資料庫其它任何都不會被寫入。如果有任何對遠端資料庫的改變,本地表中資料的完整性可能會被破壞。

·federated儲存引擎支援select, insert, update, delete和索引。它不支援alter table, drop table或任何其它的資料定義語言語句。當前的實現不使用預先準備好的語句。

·執行使用select, insert, update和delete,但不用handler。

·federated表不能對查詢快取不起作用。

這些限制中的一些在federated處理機的將來版本可能被消除。

具體使用的例子:

在遠端伺服器上建立乙個表

[email protected] : test 21:50:55> show create table tab \g

*************************** 1. row ***************************

table: tab

create table: create table `tab` (

`v1` bigint(20) unsigned default null,

`v2` varchar(45) default 'testing',

`v3` date default null

) engine=innodb default charset=utf8

注意 engine表選項可能命名任何儲存引擎

1 row in set (0.00 sec)

初始化表,插入8000記錄

[email protected] : test 21:51:15> call ct_bigtab();

query ok, 1 row affected (2.71 sec)

[email protected] : test 21:51:34> 

[email protected] : test 21:51:35> 

[email protected] : test 21:51:35> select count(1) from tab;

+----------+

| count(1) |

+----------+

|     8000 |

+----------+

1 row in set (0.00 sec)

在b伺服器上訪問遠端表建立乙個federated表:

[email protected] : test 21:55:38> create table `fed_tab` (

->   `v1` bigint(20) unsigned default null,

->   `v2` varchar(45) default 'testing',

->   `v3` date default null

-> ) engine=federated default charset=utf8 connection = 'mysql:';

query ok, 0 rows affected (0.00 sec)

[email protected] : test 21:56:41> select count(1) from fed_tab;

+----------+

| count(1) |

+----------+

|     8000 |

+----------+

1 row in set (0.02 sec)

當使用者對錶有delete,update,insert 許可權的時候,可以在本地對遠端的表進行dml操作。

[email protected] : test 21:58:37> delete from fed_tab where v1 <20;

query ok, 20 rows affected (0.06 sec)

[email protected] : test 21:58:56> select count(1) from fed_tab; 

+----------+

| count(1) |

+----------+

|     7980 |

+----------+

1 row in set (0.02 sec)

如果只有read 許可權--我在a機建立了唯讀帳號

[email protected] : test 21:59:02> create table `fed_tab_rnd` (

->   `v1` bigint(20) unsigned default null,

->   `v2` varchar(45) default 'testing',

->   `v3` date default null

-> ) engine=federated default charset=utf8 connection = 'mysql:';

query ok, 0 rows affected (0.00 sec)

[email protected] : test 22:00:17> select count(1) from fed_tab_rnd;

+----------+

| count(1) |

+----------+

|     7980 |

+----------+

1 row in set (0.01 sec)

對錶進行dml操作,則會報錯。

[email protected] : test 22:00:38> delete from fed_tab_rnd where v1 <40;

error 1296 (hy000): got error 10000 'error on remote system: 1142: delete command denied to user 'rnd'@'rac2' for table 'tab'' from federated

[email protected] : test 22:00:57> 

對於federated儲存引擎,在上有乙個專門的論壇。

**:

MySQL FEDERATED 儲存引擎

mysql中針對不同的功能需求提供了不同的儲存引擎。所謂的儲存引擎也就是mysql下特定介面的具體實現。federated是其中乙個專門針對遠端資料庫的實現。一般情況下在本地資料庫中建表會在資料庫目錄中生成相應的表定義檔案,並同時生成相應的資料檔案。但通過federated引擎建立的表只是在本地有表...

MYSQL FEDERATED儲存引擎

federated是其中乙個專門針對遠端資料庫的實現。一般情況下在本地資料庫中建表會在資料庫目錄中生成相應的表定義檔案,並同時生成相應的資料檔案。通過federated引擎建立的表只是在本地有表定義檔案,資料檔案則存在於遠端資料庫中 這一點很重要 mysql show engines 從上面可以看到...

MySQL FEDERATED引擎的使用

mysql federated引擎的使用 本地資料庫base1,遠端資料庫base2。第一步 本地資料庫base1配置 federated屬性 通過mysql56服務 右鍵屬性 可以找到 配置檔案 c programdata mysql mysql server 5.6 my.ini my.ini中...