MySQL的FEDERATED引擎實作類別Oracle的DBlink

來源:互聯網
上載者:User

標籤:mysql   federated   dblink   

   隨著業務的複雜度不斷的增加、資料庫不斷的切分,在分布式系統中往往一台或幾台資料庫並不能滿足我們的需求,所以常常需要多台同時時用,而在平時需要通過其它伺服器的資料庫擷取資訊最為方便的就是資料連結,而比較常見的如Oracle中的DBlink一般,使用過Oracle的DBlink—資料庫的連結的人都知道可以跨伺服器資料庫的來進行資料查詢。而在MySQL5.0以後中通過使用FEDERATED引擎也可以實作類別似於Oracle中DBlink,在MySQL5.5開始預設安裝只是沒有啟用,同Oracle的DBlink一樣MySQL使用FEDERATED引擎實現外連結建議是在同一個區域網路內,這樣可以減小彼此間的延遲,但兩者之間還是有很大區別的,在MySQL下使用FEDERATED引擎實現的外連結需要在本機資料庫中建虛擬表用以串連遠端資料庫,在這裡就就簡單的說明一下MySQL的FEDERATED引擎實現的資料庫外連結。

   首先,需要注意的有幾點:

1、建立外連結於區域網路內的環境實現最優;

2、使用FEDERATED引擎的外連結資料表,在本地是虛擬表,所以建表的示後不需要主鍵、索引、自增欄位這些。同理,對本地虛擬表的結構修改,並不會修改遠端資料表的結構;

3、TRUNCATE(截斷表)會清除遠端資料表資料,DROP只會刪除本地虛擬表;

4、在虛擬表上不支援ALTER

在資料庫中是否有FEDERATED引擎可以通過如下來查看:

mysql> SHOW ENGINES;+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         || CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         || MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         || BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         || MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         || InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        || ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         || PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         || FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |+--------------------+---------+----------------------------------------------------------------+--------------+------+------------+9 rows in set (0.01 sec)

一般這種情況就是有FEDERATED引擎但是沒有啟用,啟用很簡單,在my.cnf或my.ini中的[mysqld]段中修改添加,如下:

[mysqld]……federated……

重啟MySQL,此時再看就啟用了FEDERATED引擎

此時再本機資料庫建虛擬表用來連結遠端資料庫,其表結構可以通過在遠端資料庫中通過SHOW CREATE TABLE來查看DDL,但是要注意去掉主鍵、索引、自增欄位,但是本地的虛擬表的表名可以不同,如遠端資料庫:192.168.2.25下的my_test庫下有一張book_price表,遠端資料庫上的DDL:

CREATE TABLE `book_price` (  `book_name` varchar(255) NOT NULL DEFAULT '',  `book_price` decimal(11,3) NOT NULL DEFAULT '0.000') ENGINE=InnoDB DEFAULT CHARSET=utf8

在本機資料庫中的DDL如下:

CREATE TABLE `book_price_local` (  `book_name` varchar(255) NOT NULL DEFAULT '',  `book_price` decimal(11,3) NOT NULL DEFAULT '0.000') ENGINE=FEDERATED DEFAULT CHARSET=utf8 CONNECTION='mysql://root:password#@192.168.2.25:3306/my_test/book_price'#源端表DDL ENGINE=federated CONNECTION= 'mysql://使用者:密碼@IP地址:連接埠/庫名稱/表名稱';

這裡需要注意的是CONNECTION後則是遠端資料庫的串連資訊,這裡要注意的是避免使用帶‘@’的密碼以免混淆,效果如下:


MySQL的FEDERATED引擎實作類別Oracle的DBlink

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.