mysql使用federated引擎實現遠程訪問數據庫(跨網絡同時操作兩個數據庫中的表)
來源:程序員人生 發布時間:2014-12-13 09:01:33 閱讀次數:5826次
問題:
這里假定我需要在IP1上的database1上訪問IP2的database數據庫內的table2表
方法:
這里database作為本地數據庫需要開啟federated引擎才可以訪問遠程的database內的表,具體開啟方法以下:
本地IP1數據庫DATABASE1開啟FEDERATED引擎
http://blog.csdn.net/bravezhe/article/details/8269648
MYSQL命令行,查看FEDERATED引擎是不是開啟,默許是不開啟
>show engines;

可以在上圖中看出本地數據庫沒有開啟federated引擎
2.如果沒有開啟
配置my.cnf
[mysqld]
feterated
3.重啟MYSQL服務器

遠程IP2數據庫database2開啟遠程連接
開啟以后,本地數據庫database1才有權限訪問遠程的database2
http://blog.chinaunix.net/uid⑵3215128-id⑵951624.html
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 。
下面逐1分析所有的參數:
all PRIVILEGES 表示賦予所有的權限給指定用戶,這里也能夠替換為賦予某1具體的權限,例如:select,insert,update,delete,create,drop 等,具體權限間用“,”半角逗號分隔。
discuz.* 表示上面的權限是針對哪一個表的,discuz 指的是
數據庫,后面的 * 表示對所有的表,由此可以推理出:對全部
數據庫的全部表授權為“*.*”,對某1
數據庫的全部表授權為“
數據庫名.*”,對某1
數據庫的某1表授 權為“
數據庫名.表名”。
ted 表示你要給哪一個用戶授權,這個用戶可以是存在的用戶,也能夠是不存在的用戶。這里為了易用性你最好用root用戶,由于他人遠程的時候也會用,密碼也要用root用戶的密碼,由于他人也是這么用的。(保證大家都用同1個登錄信息訪問同1個數據庫,這是非常重要的)
123.123.123.123 表示允許遠程連接的 IP 地址,如果想不限制鏈接的 IP 則設置為“%”便可。
123456 為用戶的密碼。
履行了上面的語句后,再履行下面的語句,方可立即生效。
CODE: [COPY]
>
flush privileges;
查看遠程數據庫的訪問權限更新以后的情況:
可以看到已有1個虛擬的用戶scp_pm_154_54可以遠程訪問IP2上的database2了(這個scp_pm_154_54只是1個虛擬的用戶,僅僅用來遠程連接使用),下面就試試用這個賬戶能不能在另外一個IP3上面訪問這個數據庫

在本地數據庫database1中創建遠程數據庫表
要求表結構要1模1樣,所以可以先
在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:scp_pm_154_54@112.219.11.139:13306/rzem/e_hostcomputer";
在本地就能夠看到遠程表里面的內容了

修改本地的遠程表

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

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈