federated儲存引擎實現跨伺服器的資料訪問

2021-09-22 04:14:28 字數 3363 閱讀 7338

【前言】資料庫之間的跨伺服器的訪問在實際的工作中經常用到,最常見的是不同資料庫的資料比對和資料抽取。針對這個需求oracle可以通過透明閘道器和dblink的方式來滿足;mysql提供了儲存引擎federated可以實現該功能;

federated的安裝

首先檢查資料庫當前儲存引擎的安裝情況,預設的情況下federated的儲存引擎不會隨著資料庫進行安裝的;

1.1 檢查資料庫當前儲存引擎的安裝指令碼:show engines

當前的資料庫沒有安裝federated;

1.2 通過install plugin的方式安裝federated儲存引

顯示當前federated儲存引擎已經安裝好,但是未啟用;

1.3 啟動federated儲存引擎,修改/etc/my.cnf引數,在[mysqld]下面新增:federated,重啟mysql

federated的使用

當要訪問遠端的表時,需要在本地的資料庫建立乙個具有同樣表結構使用federated儲存引擎的表,當訪問這個表的時候,系統會自動遠端訪問到遠端的資料庫表;

測試步驟和環境說明

在伺服器a 資料庫test下面建立表john

mysql>create table `john` (  `id` varchar(32) default null,unique key `index-123` (`id`) )

engine=innodb default charset=utf8;

mysql> insert into john values(1),(2),(3);

query ok, 3 rows affected (0.11 sec)

records: 3  duplicates: 0  warnings: 0

mysql> select * from john;

+------+

| id   |

+------+

| 1    |

| 2    |

| 3    |

+------+

在伺服器b 資料庫test下面建立相應的表federated_john

mysql> create table federated_john (

->   `id` varchar(32) default null,

->   unique key `index-123` (`id`)

-> ) engine=innodb default charset=utf8

-> engine=federatedconnection='mysql:';

mysql> select * from federated_john;

+------+

| id   |

+------+

| 1    |

| 2    |

| 3    |

+------+

3 rows in set(0.37 sec) #請注意執行時間

mysql> insert into federated_john values(4),(5),(6);#可以通過federated_john修改資料

query ok, 3 rows affected (0.16 sec)

records: 3  duplicates: 0  warnings: 0

mysql> select * from federated_john;

+------+

| id   |

+------+

| 1    |

| 2    |

| 3    |

| 4    |

| 5    |

| 6    |

+------+

6 rows in set (0.04 sec)

在伺服器a下面查詢

mysql> select * from john;

+------+

| id   |

+------+

| 1    |

| 2    |

| 3    |

| 4    |

| 5    |

| 6    |

+------+

6 rows in set (0.00 sec)   #資料同樣被修改;

在伺服器b下面檢視儲存資料,只有表結構並沒有相應的資料

連線指令碼注意事項,federated連線字串的格式說明

mysql> create table federated_john (

->   `id` varchar(32) default null,

->   unique key `index-123` (`id`)

-> ) engine=innodb default charset=utf8

-> engine=federatedconnection='mysql:';

其中connection的格式如下:

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

【總結】利用federated儲存引擎構建表的時候,可以快速實現跨資料庫的訪問和修改,為一些特殊場景的應用提供了良好的解決辦法;

由於是跨主機的訪問,所以當表數量級別達到十萬以上的時候,整個訪問的速度相對本機有很明顯的效率問題。

技術部落格:獵人筆記                                                資料庫技術群:367875324 (請備註資料庫型別)

MySQL儲存引擎之 Federated

federated 儲存引擎允許訪問遠端mysql資料庫中的資料,federated 僅支援表級別的遠端訪問。本地的federated表中不儲存資料,訪問本地表時,會自動從遠端表中獲取資料。mysql 預設未開啟federated儲存引擎,需要修改配置檔案進行開啟。mysql show engine...

mysql的儲存引擎之FEDERATED

federated 引擎和其他引擎的不同在於 結構相同,但是物理資料儲存實在遠端。換言之就是你本地的資料庫只由表結構不儲存資料,資料在其他資料庫商。乙個federated表有以下兩部分組成。第一步遠端表建立 create table test table id int 20 not null aut...

通過FEDERATED儲存引擎跨例項訪問資料

通過federated儲存引擎同步兩例項間的表資料 需求情景 例項1中a庫中的三個檢視是例項2中的b庫所依賴的,b需要a庫中三個檢視的實時資料。方案 通過federated來完成跨勢力的查詢 federated儲存引擎表只會建立表結構,不會儲存表資料,可以通過建表語句中的connection con...