【前言】資料庫之間的跨伺服器的訪問在實際的工作中經常用到,最常見的是不同資料庫的資料比對和資料抽取。針對這個需求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...