mysql使用federated引擎实现远程访问数据库(跨网络同时操作两个数据库中的表)_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 1933 | 回复: 0   主题: mysql使用federated引擎实现远程访问数据库(跨网络同时操作两个数据库中的表)        下一篇 
yuzi_wang
注册用户
等级:新兵
经验:61
发帖:7
精华:0
注册:2013-11-19
状态:离线
发送短消息息给yuzi_wang 加好友    发送短消息息给yuzi_wang 发消息
发表于: IP:您无权察看 2015-1-5 10:16:44 | [全部帖] [楼主帖] 楼主

问题:

这里假设我需要在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:scp_pm_154_54@112.219.11.139:13306/rzem/e_hostcomputer";


在本地就可以看到远程表里面的内容了

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论