歡迎使用CSDN markdown編輯器

2021-07-05 05:53:03 字數 4255 閱讀 3218

1 引擎說明

本地mysql資料庫要訪問遠端mysql資料庫的表中的資料, 必須通過federated儲存引擎來實現. 有點類似oracle中的

資料庫鏈結(dblink). 要允許這個儲存引擎, 當構建mysql時使用–with-federated-storage-engine來configure.

當建立乙個federated表的時候, 伺服器在資料庫目錄建立乙個表定義檔案. 檔案由表的名字開始, 並有乙個.frm副檔名.

無其它檔案被建立, 因為實際的資料在乙個遠端資料庫上. 使用federated表的步驟是非常簡單的. 通常, 執行兩個伺服器,

要麼在同乙個主機上, 要麼在不同主機上.

首先, 必須在想要用federated表訪問的遠端伺服器上有乙個表. 假設, 遠端的表在db_fed資料庫中並且被如下定義:

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;

接著, 在本地伺服器上為訪問遠端表建立乙個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指明如何連線到遠端伺服器上的連線字串之外,

這個表的結構必須完全與遠端表的結構相同.

遠端主機資訊指明本地伺服器要連線到的遠端伺服器, 資料庫和表資訊指明哪乙個遠端表要被作為資料檔案來用. 在這個例子中.

遠端伺服器被指定來作為遠端主機在9306埠上執行, 所以要啟動伺服器, 讓它監聽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資料庫中查詢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處理機的將來版本可能被消除.

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引擎訪問, 這個使用者的許可權決定了遠端federated表的操作許可權:

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引數,

或者在my.cnf裡[mysqld]段後面加了federated引數, 如下, 然後重啟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

歡迎使用CSDN markdow

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...

歡迎毛毛與妞妞使用CSDN markdown編輯器

建立乙個自定義列表 如何建立乙個註腳 注釋也是必不可少的 katex數學公式 新的甘特圖功能,豐富你的文章 uml 圖表 flowchart流程圖 匯出與匯入 你好!這是你第一次使用markdown編輯器所展示的歡迎頁。如果你想學習如何使用markdown編輯器,可以仔細閱讀這篇文章,了解一下mar...

歡迎使用CSDN markdow1n編輯器

本markdown編輯器使用stackedit修改而來,用它寫部落格,將會帶來全新的體驗哦 markdown 是一種輕量級標記語言,它允許人們使用易讀易寫的純文字格式編寫文件,然後轉換成格式豐富的html頁面。維基百科 使用簡單的符號標識不同的標題,將某些文字標記為粗體或者斜體,建立乙個鏈結等,詳細...