類似 Oracle DB Link,FEDERATED 讓本地建立「映射表」,透明訪問遠程 MySQL 實例的表。本地僅存 .frm 定義檔,無資料檔,所有操作轉發至遠程執行。
# my.cnf [mysqld] 區段
federated
# 重啟驗證
SHOW ENGINES;
-- FEDERATED | YES | Federated MySQL storage engine
# 建庫建表
CREATE DATABASE tempdb;
USE tempdb;
CREATE TABLE tb_engine AS
SELECT engine, support, comment FROM information_schema.engines;
# 建立遠程訪問帳號
GRANT ALL PRIVILEGES ON tempdb.* TO 'remote_user'@'192.168.1.131' IDENTIFIED BY 'xxx';
FLUSH PRIVILEGES;
# 取得建表語句供本地複製結構
SHOW CREATE TABLE tb_engine\G
USE test;
CREATE TABLE `federated_engine` (
`engine` VARCHAR(64) NOT NULL DEFAULT '',
`support` VARCHAR(8) NOT NULL DEFAULT '',
`comment` VARCHAR(80) NOT NULL DEFAULT ''
) ENGINE=FEDERATED DEFAULT CHARSET=utf8
CONNECTION='mysql://remote_user:xxx@192.168.1.131:3406/tempdb/tb_engine';
-- 查詢(實際在遠程執行)
SELECT * FROM federated_engine LIMIT 2;
-- 更新(遠程執行 UPDATE)
UPDATE federated_engine SET support='NO' WHERE engine='CSV';
SELECT * FROM federated_engine WHERE engine='CSV';
-- support 已變更為 NO
-- 本地僅有 .frm
ls -l /var/lib/mysql/test/federated_engine.frm
scheme://user_name[:password]@host_name[:port_num]/db_name/tbl_name
scheme : 僅支援 mysql
user_name : 遠程已建立的用戶
password : 可選,明文儲存於 .frm(安全風險)
host_name : 遠程 IP 或主機名
port_num : 可選,預設 3306
db_name : 遠程資料庫
tbl_name : 遠程表名(可與本地表名不同)
CONNECTION='mysql://user:pass@10.0.0.1:3306/db/tbl'
CONNECTION='mysql://user@10.0.0.1/db/tbl'
CONNECTION='mysql://user:pass@10.0.0.1/db/tbl'
CONNECTION='mysql://user:pass@host:port/db/tbl?ssl_ca=...&ssl_cert=...&ssl_key=...' (需驗證版本支援)mysql_config_editor 或應用層組裝連線字串FEDERATED 為跨實例透明訪問提供輕量方案:ENGINE=FEDERATED CONNECTION='mysql://user:pass@host:port/db/tbl'。適合小表、低頻、參考資料場景。大數據、高並發、事務一致性需求請用複寫、CDC 同步或中間件路由。