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雙數據源配置,這種方式相對是比較簡單的,而且這個是可以關聯多個數據庫的。

 

問題:

1.數據庫密碼可能帶有特殊字符,如@字符

遇見這種用上面的創建方法無法創建,會報錯

可以使用如下解決方法

先創建一個鏈接服務

CREATE SERVER fedlink FOREIGN DATA WRAPPER mysql OPTIONS (
    USER 'root',   #數據庫用戶名
    PASSWORD '123456',  #數據庫密碼
    HOST '192.168.0.11', #數據庫地址
    PORT 3306, #數據庫端口
    DATABASE 'XXXXX' #數據庫名
);

然後再創建表

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='fedlink/a'

 DEFAULT CHARSET=utf8 ; 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章