萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 程式設計 >  >> 資料庫 >> MySQL 教學

MySQL FEDERATED 引擎實現跨伺服器表訪問(DB Link 替代方案)

MySQL 無原生 DBLINK,但可透過 FEDERATED 儲存引擎 建立「遠端表映射」,像查本地表一樣查詢遠端 MySQL 資料。本文演示從 Source 建表授權到 Target 建立 FEDERATED 表的完整流程。

架構圖

Source (192.168.1.100)          Target (192.168.1.101)
+------------------+             +------------------+
|  Database: src   |  <--SQL-->   |  Engine=FEDERATED|
|  Table: s        |  (MySQL      |  Table: s_fed    |
|  Engine=InnoDB   |   Protocol)  |  -> src.s        |
+------------------+             +------------------+

步驟 1:Source 端建立測試表並授權

-- 1. 建表(示範用 mysql.user 結構)
CREATE TABLE src.s SELECT * FROM mysql.user;

-- 2. 建立遠端連線專用帳號
CREATE USER 'fed_user'@'192.168.1.101' IDENTIFIED BY 'StrongPass123';
GRANT SELECT, INSERT, UPDATE, DELETE ON src.s TO 'fed_user'@'192.168.1.101';
FLUSH PRIVILEGES;

步驟 2:Target 端啟用 FEDERATED 引擎

-- 檢查支援
SHOW ENGINES;
-- 若 FEDERATED 顯示 NO,需啟用:
-- my.cnf [mysqld] 區段加入:federated=1 → 重啟
-- 或動態載入(需插件檔存在):
INSTALL PLUGIN FEDERATED SONAME 'ha_federated.so';

步驟 3:Target 端建立 FEDERATED 映射表

關鍵:結構必須與 Source 表完全一致(欄位名、型別、順序、索引)。最簡單:SHOW CREATE TABLE src.s 複製結構,改引擎與連線資訊。

CREATE TABLE `s_fed` (
  `Host` CHAR(60) NOT NULL DEFAULT '',
  `User` CHAR(16) NOT NULL DEFAULT '',
  `Password` CHAR(41) NOT NULL DEFAULT '',
  -- ... 其餘欄位完全複製 ...
  PRIMARY KEY (`Host`,`User`)
) ENGINE=FEDERATED
DEFAULT CHARSET=utf8
CONNECTION='mysql://fed_user:StrongPass123@192.168.1.100:3306/src/s';
  • CONNECTION 字串格式:mysql://user:pass@host:port/db/table。
  • 密碼含特殊字元需 URL 編碼。
  • Target 表名可異於 Source(此處 s_fed)。

步驟 4:驗證查詢與寫入

-- 查詢
SELECT * FROM s_fed LIMIT 5;

-- 寫入(需 Source 授權 INSERT)
INSERT INTO s_fed (Host, User, Password) VALUES ('%', 'test_fed', '*HASH');

-- 刪除/更新同理

效能與限制必讀

生產級替代方案

  • MySQL 8.0 Clone Plugin / 熱備份 + 還原:定期同步整庫至只讀副本。
  • CDC (Canal/Debezium) + Kafka → 目標庫:準即時、解耦、可重放。
  • 應用層雙寫 / API 聚合:業務邏輯層組合多源資料。

FEDERATED 適合小表、低頻、臨時整合;核心高頻業務請採用 CDC 或資料整合平台。

copyright © 萬盛學電腦網 all rights reserved
項目說明
網路往返每次查詢/寫入皆發起 TCP 連線,延遲 = 網路 RTT + 遠端執行時間
無索引下推WHERE 條件在 Target 評估,全表掃描後再過濾,大表效能極差
無事務支援跨 FEDERATED 表操作不具備 ACID
連線數每個 FEDERATED 表操作獨立連線,高併發易耗盡遠端 max_connections
DDL 限制ALTER TABLE、TRUNCATE 不支援
字符集雙端字符集不一致會導致亂碼