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

MySQL FEDERATED 引擎實現異構資料庫遠程表訪問(DBLink 替代方案)

     編輯:MySQL 資料庫相關知識

MySQL 無原生 DBLink,但可透過 FEDERATED 存儲引擎 在本地建立映射遠程表的「虛擬表」,實現跨實例查詢。本文完整演示從 Source 端建表授權、Target 端啟用 FEDERATED、建立映射表到驗證查詢的全流程。

一、架構與前提

  • Source(遠程):192.168.100.41:3306,資料庫 sources,表 s
  • Target(本地):192.168.100.42,需啟用 FEDERATED 引擎
  • 網路互通,防火牆開放 3306

二、Source 端:建立測試表與授權用戶

1. 建立測試表(複製 mysql.user 結構)

CREATE TABLE s SELECT * FROM mysql.user;

2. 查看建表語句(Target 建映射表需完全一致的結構)

SHOW CREATE TABLE s;

(輸出結構含 42 個欄位,ENGINE=InnoDB, CHARSET=latin1)

3. 建立專用用戶並授權

GRANT ALL PRIVILEGES ON sources.s TO 'dex'@'%' IDENTIFIED BY 'xiaojun';
GRANT ALL PRIVILEGES ON sources.s TO 'dex'@'192.168.100.42' IDENTIFIED BY 'xiaojun';
FLUSH PRIVILEGES;

三、Target 端:啟用 FEDERATED 引擎

1. 檢查引擎狀態

SHOW ENGINES;
-- FEDERATED | NO  表示未啟用

2. 安裝/啟用引擎

-- 嘗試安裝插件(若提示已存在則跳過)
INSTALL PLUGIN federated SONAME 'ha_federated.so';

3. 修改配置檔永久啟用

# /etc/my.cnf
[mysqld]
federated

4. 重啟驗證

service mysql restart
SHOW ENGINES;
-- FEDERATED | YES  表示啟用成功

四、Target 端:建立 FEDERATED 映射表

結構必須與 Source 端 s 表完全一致,引擎指定 FEDERATED,連線資訊寫在 CONNECTION 選項:

CREATE TABLE `links` (
    `Host` char(60) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
    `User` char(16) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL DEFAULT '',
    `Password` char(41) CHARACTER SET latin1 COLLATE latin1_bin NOT NULL DEFAULT '',
    -- ... 其餘 39 個欄位完全複製 SHOW CREATE TABLE 輸出 ...
    `password_expired` enum('N','Y') CHARACTER SET utf8 NOT NULL DEFAULT 'N'
) ENGINE=FEDERATED
DEFAULT CHARSET=latin1
CONNECTION='mysql://dex:xiaojun@192.168.100.41:3306/sources/s';

CONNECTION 格式解析:

  • mysql://:協議固定
  • dex:xiaojun:用戶名:密碼
  • @192.168.100.41:3306:遠程主機:端口
  • /sources/s:資料庫/表名

五、驗證查詢

mysql> SELECT COUNT(*) FROM links;
+----------+
| count(*) |
+----------+
|       12 |
+----------+
1 row in set (0.00 sec)

查詢成功,遠程表資料可透過本地 links 表直接存取。

六、進階用法與限制

特性說明
WHERE 條件下推支援:SELECT * FROM links WHERE Host='%' 會在遠程端過濾
JOIN 操作可與本地表 JOIN,但遠程表無索引統計,優化器可能選擇錯誤執行計畫
INSERT/UPDATE/DELETE支援(需遠程用戶有寫權限),事務不支援跨實例
DDL 同步不支援:Source 端 ALTER TABLE 需手動同步修改 Target 映射表結構
連線池/超時每個查詢建立新連線,高併發下延遲大,建議配合 ProxySQL 或應用層快取
SSL 加密支援 mysqls:// 協議,需配置憑證

七、替代方案對比

  • FEDERATED:零部署、即時查詢、適合低頻跨庫查詢/報表
  • 複製/同步工具:將遠程表同步到本地實體表(如 Canal、Debezium、自建 ETL),高頻/大數據量首選
  • 應用層聚合:微服務各自連自己的庫,API 層組裝資料,架構最清晰

FEDERATED 引擎是 MySQL 跨實例查詢的輕量利器,掌握其啟用、映射表建立、連線字串格式與效能特性,能快速解決「偶爾查一下隔壁庫的表」的需求。

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