久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

mysql數(shù)據(jù)庫互連

 毀滅號 2014-05-27

MySQL FEDERATED引擎使用示例, 類似Oracle DBLINK.

1 引擎說明

本地MySQL數(shù)據(jù)庫要訪問遠程MySQL數(shù)據(jù)庫的表中的數(shù)據(jù), 必須通過FEDERATED存儲引擎來實現(xiàn). 有點類似Oracle中的

數(shù)據(jù)庫鏈接(DBLINK). 要允許這個存儲引擎, 當構(gòu)建MySQL時使用--with-federated-storage-engine來configure.  

當創(chuàng)建一個FEDERATED表的時候, 服務器在數(shù)據(jù)庫目錄創(chuàng)建一個表定義文件. 文件由表的名字開始, 并有一個.frm擴展名. 

無其它文件被創(chuàng)建, 因為實際的數(shù)據(jù)在一個遠程數(shù)據(jù)庫上. 使用FEDERATED表的步驟是非常簡單的. 通常, 運行兩個服務器, 

要么在同一個主機上, 要么在不同主機上. 

首先, 必須在想要用FEDERATED表訪問的遠程服務器上有一個表. 假設, 遠程的表在DB_FED數(shù)據(jù)庫中并且被如下定義:  

CREATE TABLE test_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=MyISAM;

接著, 在本地服務器上為訪問遠程表創(chuàng)建一個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 CONNECTION='mysql://remote_user@remote_host:9306/db_fed/test_table';

除了ENGINE選項應該是FEDERATED, 并且CONNECTION表選項是給FEDERATED指明如何連接到遠程服務器上的連接字符串之外, 

這個表的結(jié)構(gòu)必須完全與遠程表的結(jié)構(gòu)相同.  

遠程主機信息指明本地服務器要連接到的遠程服務器, 數(shù)據(jù)庫和表信息指明哪一個遠程表要被作為數(shù)據(jù)文件來用. 在這個例子中. 

遠程服務器被指定來作為遠程主機在9306端口上運行, 所以要啟動服務器, 讓它監(jiān)聽9306端口.  

在CONNECTION選項中的連接字符串的一般形式如下(密碼和端口號是可選的):  

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

這里有一些連接字符串的例子:  

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

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

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

因為任何被用的密碼作為純文本被存在連接字符串中, 它可以被任何使對FEDERATED表使用SHOW CREATE TABLE或SHOW TABLE STATUS的用戶, 或者在INFORMATION_SCHEMA數(shù)據(jù)庫中查詢TABLES表的用戶看見.  

FEDERATED支持及不支持的如下:  

·遠程服務器必須是一個MySQL服務器. FEDERATED對其它數(shù)據(jù)庫引擎的支持可能會在將來被添加.  

·FEDERATED表指向的遠程表在通過FEDERATED表訪問它之前必須存在.  

·一個FEDERATED表指向另一個FEDERATED表是可能的, 但是必須小心不要創(chuàng)建一個循環(huán).  

·沒有對事務的支持.  

·如果遠程表已經(jīng)改變, 對FEDERATED引擎而言是沒有辦法知道的. 這個的原因是因為這個表必須象數(shù)據(jù)文件一樣工作, 

除了數(shù)據(jù)庫其它任何都不會被寫入. 如果有任何對遠程數(shù)據(jù)庫的改變, 本地表中數(shù)據(jù)的完整性可能會被破壞.  

·FEDERATED存儲引擎支持SELECT,INSERT,UPDATE,DELETE和索引. 它不支持ALTER TABLE,DROP TABLE或任何

其它的數(shù)據(jù)定義語言語句. 當前的實現(xiàn)不使用預先準備好的語句.  

·執(zhí)行使用SELECT,INSERT,UPDATE和DELETE, 但不用HANDLER.  

·FEDERATED表不能對查詢緩存不起作用.  

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


2 使用示例

MySQL實例A(主機192.168.41.196)下, 建立對遠程MySQL實例B(主機192.168.41.197)的表db_fed.tab_test訪問.


1) MySQL實例B建立測試表

mysql> create database db_fed;

mysql> use db_fed

mysql> CREATE TABLE tab_test (

    id     int(20) NOT NULL auto_increment,

    name   varchar(32) NOT NULL default '',

    PRIMARY KEY (id)

) ENGINE=MyISAM;

mysql> insert into tab_test set name = 'test1';

mysql> insert into tab_test set name = '測試1';

mysql> select * from tab_test;

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

| id | name  |

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

|  1 | test1 |

|  3 | 測試1 |

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


--建立一個用戶專門用于遠程federated引擎訪問, 這個用戶的權(quán)限決定了遠程federated表的操作權(quán)限:

mysql> grant select on db_fed.* to [email protected] identified by 'iamwangnc';


2) MySQL實例A建立FEDERATED引擎表

--確認FEDERATED引擎已啟用:

mysql> show engines;

...

| FEDERATED  | YES     | Federated MySQL storage engine                                 | NO           | NO   | NO         |

...


--如果未啟用, 先確保configure MySQL時加了--with-federated-storage-engine選項, 另外還確保啟動mysqld時加了--federated參數(shù), 

或者在my.cnf里[mysqld]段后面加了federated參數(shù), 如下, 然后重啟mysqld:

--------------------------------

[mysqld]

federated

--------------------------------


--在某個庫下建立FEDERATED引擎表:

mysql> create database db_test;

mysql> use db_test

mysql> CREATE TABLE tab_test_fed (

    id     int(20) NOT NULL auto_increment,

    name   varchar(32) NOT NULL default '',

    PRIMARY KEY (id)

) ENGINE=FEDERATED connection = 'mysql://u_fed:[email protected]:3306/db_fed/tab_test';


--測試是否可以訪問:

mysql> select * from tab_test_fed;

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

| id | name  |

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

|  1 | test1 |

|  3 | 測試1 |

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


--測試是否可以修改:

mysql> delete from tab_test_fed;

ERROR 1296 (HY000): Got error 10000 'Error on remote system: 1142: DROP command denied to user 'u_fed'@'comp196' 

for table 'tab_test'' from FEDERATED


參考: http://dev./doc/refman/5.1/zh/storage-engines.html#federated-storage-engine

--End--

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多