首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 利用 FEDERATED 引擎實現遠程表連接完整指南

     編輯:MySQL 資料庫相關知識

前言

MySQL 的 FEDERATED 儲存引擎提供了一種類似 Oracle DBLink 的功能,讓本地資料庫能透過建立遠程連接表,直接查詢與操作遠端 MySQL 實例的資料。本文將以 MySQL 5.6.21 為測試環境,詳細說明如何啟用 FEDERATED 引擎、建立遠程連接表、進行資料操作,並探討其限制與注意事項。

一、啟用 FEDERATED 儲存引擎

預設情況下,MySQL 未啟用 FEDERATED 引擎。首先執行 SHOW ENGINES; 查看目前引擎狀態:

SHOW ENGINES;

若 FEDERATED 顯示為 NO,需修改設定檔 my.cnf(Windows 為 my.ini),在 [mysqld] 區段下新增:

federated

重啟 MySQL 服務後,再次執行 SHOW ENGINES; 即可看到 FEDERATED 狀態變為 YES。

二、建立遠程連接表

1. 取得遠端表結構

本地建立的 FEDERATED 表結構必須與遠端表完全一致。以官方範例資料庫 sakila.actor 為例:

SHOW CREATE TABLE sakila.actor;

2. 建立 FEDERATED 表

CREATE TABLE FEDERATED_actor (
  `actor_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
  `first_name` varchar(45) NOT NULL,
  `last_name` varchar(45) NOT NULL,
  `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`actor_id`),
  KEY `idx_actor_last_name` (`last_name`)
) ENGINE = FEDERATED
CONNECTION = 'mysql://root:123456@127.0.0.1:3306/sakila/actor';

關鍵點說明:

  • ENGINE = FEDERATED:指定使用 FEDERATED 引擎
  • CONNECTION 連接字串格式:mysql://user_name[:password]@host_name[:port_num]/db_name/tbl_name
  • 常見連接字串範例:
    • mysql://username:password@hostname:port/database/tablename
    • mysql://username@hostname/database/tablename
    • mysql://username:password@hostname/database/tablename
  • 安全警示: 密碼以明文寫在連接字串中,執行 SHOW CREATE TABLE 或 SHOW TABLE STATUS 時皆可見,生產環境建議改用其他安全方案

三、資料操作驗證

1. 查詢資料

SELECT * FROM test.federated_actor;

2. 更新資料

USE test;
UPDATE federated_actor SET last_name = 'GUINESS1' WHERE actor_id = 1;
SELECT * FROM test.federated_actor;
SELECT * FROM sakila.actor;

對本地 FEDERATED 表進行更新,遠端原始表資料也會同步異動,雙向同步即時生效。

四、功能限制與注意事項

1. 不支援 DDL 操作

ALTER TABLE federated_actor ADD COLUMN idtest INT DEFAULT 0;
-- Error Code: 1031. Table storage engine for 'federated_actor' doesn't have this option

FEDERATED 引擎不支援 ALTER TABLE,需在遠端直接修改表結構,再同步調整本地表定義。

2. 刪除本地表不影響遠端

DROP TABLE test.federated_actor;

僅移除本地連接定義,遠端實體表與資料保持不變。

五、總結

FEDERATED 引擎為 MySQL 提供了跨實例查詢能力,類似異構資料庫的 DBLink。優點是實作簡單、即時同步;缺點則是配置較繁瑣、需在本地建立映射表、密碼明文存儲有安全風險、不支援 DDL、效能受網路延遲影響較大。期待後續 MySQL 版本能在安全性與效能上進一步優化。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved