2015年12月24日 星期四

MySQL federated 引擎本地資料庫 連接遠端資料庫,MySQL也可以擁有 DBLink 的功能

以前在使用 MS SQL Server 的時候因為可能必須跟別個資料庫進行串接,有可能會利用到 DBLink 來操作 SQL命令 來遠端資料庫,在 MySQL 本身並不具有 DBLink,但幸好也有對應的方法可以使用,也就是 federated 引擎

 

在 MySQL 中針對不同的功能提供了各式儲存引擎,其中 federated 就是一個針對遠程資料庫操作的實現,透過 federated 所創建的資料表只會在 local 建立含有 schema 的空資料表,而 data 來源則是遠端



 

 

MySQL 啟動 federated 引擎

一般預設 MySQL 都會搭載 federated 引擎但不見得有開啟,本篇會從安裝 federated 開始

 

檢查 federated 是否有開啟,如果 federated 的 Support = YES 代表你可以略過以下解決方案建立 federated 資料表!
$ mysql -uroot -p 

mysql> show engines;

Engine Support
FEDERATED YES
CSV YES
MyISAM DEFAULT
InnoDB YES
MEMORY YES
MRG_MYISAM YES

一般在建立 federated 引擎可能會遇到兩種狀況

 

狀況1. federated Support = NO,從 5.1.26 開始 MySQL 預設不開啟 federated 引擎,所以必須從 my.cnf 加入 federated 啟動
$ vim /etc/my.cnf 

federated

$ service mysqld restart
$ mysql -uroot -p

mysql> show engines;
FEDERATED YES

 

狀況2. 沒有 federated,連 support = no 都沒有,這代表在安裝 MySQL 的時候沒有編譯進來,可以選擇動態編譯,但你必須確認擁有 ha_federated.so 的 lib,通常在 /usr/lib64/mysql/plugin 或是 /usr/local/mysql/lib/mysql/plugin
mysql> install plugin federated soname 'ha_federated.so'; 

$ vim /etc/my.cnf
federated

$ service mysqld restart
$ mysql -uroot -p

mysql> show engines;

FEDERATED YES

 

以上都沒有問題之後就可以接下來建立 federated table
CREATE TABLE `remote_article` ( 
`id` mediumint(8) unsigned NOT NULL DEFAULT '0',
`typeid` smallint(5) unsigned NOT NULL DEFAULT '0',
`body` mediumtext,
`redirecturl` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `typeid` (`id`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://root:rootpass@192.168.0.10:3306/dbname/article';

建立 federated table 必須注意的點是 ENGINE 必須使用 federated,然後使用 CONNECTION 參數來告訴 federated 遠端資料庫的連線資訊

 

使用 federated 因為是使用網路連線來抓取 data,所以使用 federated 的時候網路狀況可能是一項瓶頸,但這是一個比較不耗費本機資源的方式,實作上其實還是可以利用 replication 將資料複寫回來,避免網路中斷的狀況

 

Orignal From: MySQL federated 引擎本地資料庫 連接遠端資料庫,MySQL也可以擁有 DBLink 的功能

沒有留言:

張貼留言