mysql基於federated儲存引擎訪問遠端資料庫表
還是老問題
最近在開發一個專案,需要訪問另一個專案的資料,由於兩個資料庫是部署在同一個伺服器上,且本專案只是對另一資料讀取,因此決定在專案中使用雙資料來源配置進行訪問。
如果是想在程式碼中做雙資料來源配置,可以檢視我的另一篇文章:SpringMVC雙資料來源配置
今天我這邊要講的是另一種方式,mysql基於federated儲存引擎訪問遠端資料庫表。
基於這種方式,從程式角度來看,只需要訪問一個數據庫即可。
但是這個是有一個前置條件:兩個資料庫都必須是mysql資料庫,且被訪問的表必須是可以通過網路訪問到的(同一臺機器也好,同一個區域網也好,走外網對映也好,總之要能被訪問就是了)
好了,話不多說,馬上開始。
假設有A和B兩個資料庫。
B庫想訪問A庫的表a
1、先開啟B庫的federated儲存引擎
檢視資料庫的federated儲存引擎是否開啟;
方法一、開啟mysql的命令列客戶端,輸入show engines;
方法二、開啟navicate,在information_schema中找到ENGINES表
查看錶的記錄
顯示NO就表示沒開啟,需要開啟;
開啟MYSQL的my.ini檔案,進行編輯,在[mysqld]標籤下新增federated,具體如下
設定完後重啟mysql服務,即可。
2、在B庫中新增資料表
CREATE TABLE `a` (
`id` varchar(64) NOT NULL,
`no` varchar(32) DEFAULT NULL,
`name` varchar(64) DEFAULT NULL,
`start_time` varchar(128) DEFAULT NULL,
`end_time` varchar(128) DEFAULT NULL
) ENGINE=FEDERATED
CONNECTION='mysql://root:123456@localhost:3306/A/a'
DEFAULT CHARSET=utf8 ;
注意:
ENGINE=FEDERATED指定引擎型別
CONNECTION='mysql://root:123456@localhost:3306/A/a'指定連線的資料庫和表資訊
root:資料庫使用者名稱
123456:資料庫密碼
localhost:A庫的訪問地址
3306:A庫的埠
A:資料庫名稱
a:表名
建立完後就看到B庫有a表,可以進行查詢和修改,具體的訪問許可權是根據CONNECTION裡面的資料庫使用者許可權來決定的。
到此,程式就可以直接通過B庫訪問和修改A庫中的a表。
比起SpringMVC雙資料來源配置,這種方式相對是比較簡單的,而且這個是可以關聯多個數據庫的。