在 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 的功能
沒有留言:
張貼留言