程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> mysql使用federated引擎實現遠程訪問數據庫(跨網絡同時操作兩個數據庫中的表)

mysql使用federated引擎實現遠程訪問數據庫(跨網絡同時操作兩個數據庫中的表)

編輯:MySQL綜合教程

mysql使用federated引擎實現遠程訪問數據庫(跨網絡同時操作兩個數據庫中的表)


問題:

這裡假設我需要在IP1上的database1上訪問IP2的database數據庫內的table2表

方法:

這裡database作為本地數據庫需要開啟federated引擎才可以訪問遠程的database內的表,具體開啟方法如下:

本地IP1數據庫DATABASE1開啟FEDERATED引擎

MYSQL命令行,查看FEDERATED引擎是否開啟,默認是不開啟

>show engines;
\

可以在上圖中看出本地數據庫沒有開啟federated引擎

2.如果沒有開啟
配置my.cnf
[mysqld]
feterated

3.重啟MYSQL服務器
\

遠程IP2數據庫database2開啟遠程連接

開啟之後,本地數據庫database1才有權限訪問遠程的database2

2)創建遠程登陸用戶並授權

USE mysql;
SELECT host,user,PASSWORD from user;

GRANT ALL PRIVILEGES ON *.* TO "root"@"%" IDENTIFIED BY "yourpassward";

FLUSH PRIVILEGES;

USE mysql;
SELECT host,user,PASSWORD from user;
CODE: [COPY]
> grant all PRIVILEGES on discuz.* to ted@'123.123.123.123' identified by '123456';
上面的語句表示將 discuz 數據庫的所有權限授權給 ted 這個用戶,允許 ted 用戶在 123.123.123.123 這個 IP 進行遠程登陸,並設置 ted 用戶的密碼為 123456 。
下面逐一分析所有的參數:
all PRIVILEGES 表示賦予所有的權限給指定用戶,這裡也可以替換為賦予某一具體的權限,例如:select,insert,update,delete,create,drop 等,具體權限間用“,”半角逗號分隔。
discuz.* 表示上面的權限是針對於哪個表的,discuz 指的是數據庫,後面的 * 表示對於所有的表,由此可以推理出:對於全部數據庫的全部表授權為“*.*”,對於某一數據庫的全部表授權為“數據庫名.*”,對於某一數據庫的某一表授 權為“數據庫名.表名”。
ted 表示你要給哪個用戶授權,這個用戶可以是存在的用戶,也可以是不存在的用戶。這裡為了易用性你最好用root用戶,因為別人遠程的時候也會用,密碼也要用root用戶的密碼,因為別人也是這麼用的。(保證大家都用同一個登錄信息訪問同一個數據庫,這是非常重要的)
123.123.123.123 表示允許遠程連接的 IP 地址,如果想不限制鏈接的 IP 則設置為“%”即可。
123456 為用戶的密碼。
執行了上面的語句後,再執行下面的語句,方可立即生效。
CODE: [COPY]
> flush privileges;

查看遠程數據庫的訪問權限更新之後的情況:

可以看到已經有一個虛擬的用戶scp_pm_154_54可以遠程訪問IP2上的database2了(這個scp_pm_154_54只是一個虛擬的用戶,僅僅用來遠程連接使用),下面就試試用這個賬戶能不能在另一個IP3上面訪問這個數據庫

\

在本地數據庫database1中創建遠程數據庫表

要求表結構要一模一樣,所以可以先

在database2裡面找到建立表table2的語句

SHOW CREATE TABLE database2.table2

得到建表語句

CREATE TABLE `e_hostcomputer` (
`ID` bigint(20) NOT NULL COMMENT 'ID',
`CODE` varchar(30) DEFAULT NULL COMMENT '編碼',
`NAME` varchar(50) DEFAULT NULL COMMENT '名稱',
`IP` varchar(15) DEFAULT NULL COMMENT 'IP地址',
`STATUS` char(1) DEFAULT NULL COMMENT '狀態',
`CRTR` varchar(50) DEFAULT NULL COMMENT '創建者',
`CRTDT` timestamp NULL DEFAULT NULL COMMENT '創建時間',
`UPDR` varchar(50) DEFAULT NULL COMMENT '修改者',
`UPDDT` timestamp NULL DEFAULT NULL COMMENT '修改時間',
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='上位機表'

遠程IP2上數據庫database2中的表table2

在本地建立相同的表(遠程表)

 

CREATE TABLE `e_hostcomputer_link39` (
  `ID` bigint(20) NOT NULL COMMENT 'ID',
  `CODE` varchar(30) DEFAULT NULL COMMENT '編碼',
  `NAME` varchar(50) DEFAULT NULL COMMENT '名稱',
  `IP` varchar(15) DEFAULT NULL COMMENT 'IP地址',
  `STATUS` char(1) DEFAULT NULL COMMENT '狀態',
  `CRTR` varchar(50) DEFAULT NULL COMMENT '創建者',
  `CRTDT` timestamp NULL DEFAULT NULL COMMENT '創建時間',
  `UPDR` varchar(50) DEFAULT NULL COMMENT '修改者',
  `UPDDT` timestamp NULL DEFAULT NULL COMMENT '修改時間',
  PRIMARY KEY (`ID`)
) ENGINE=federated connection="mysql://scp_pm_154_54:[email protected]:13306/rzem/e_hostcomputer";
在本地就可以看到遠程表裡面的內容了

 

\
 

修改本地的遠程表

\

可以到遠程看到遠程也被修改了

\

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved