mysql使用federated引擎实现远程访问数据库(跨网络同时操作两个数据库中的表)

问题:

这里假设我需要在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-23215128-id-2951624.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 [email protected]‘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";

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

修改本地的远程表

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

时间: 2024-10-29 19:05:38

mysql使用federated引擎实现远程访问数据库(跨网络同时操作两个数据库中的表)的相关文章

MySQL的FEDERATED引擎实现类Oracle的DBlink

随着业务的复杂度不断的增加.数据库不断的切分,在分布式系统中往往一台或几台数据库并不能满足我们的需求,所以常常需要多台同时时用,而在平时需要通过其它服务器的数据库获取信息最为方便的就是数据链接,而比较常见的如Oracle中的DBlink一般,使用过Oracle的DBlink-数据库的链接的人都知道可以跨服务器数据库的来进行数据查询.而在MySQL5.0以后中通过使用FEDERATED引擎也可以实现类似于Oracle中DBlink,在MySQL5.5开始默认安装只是没有启用,同Oracle的DBl

同时操作两个数据库:报错Illegal attempt to associate a collection with two open sessions

今天我在一个操作两个数据库的SSH里 同时插入1条数据 报错 Illegal attempt to associate a collection with two open sessions 在这里有答案:http://fuaotech.iteye.com/blog/1298826 使用hibenate的merge方法代替save.update等方法. merge和saveOrUpdate方法区别在于:merge方法是把我们提供的对象转变为托管状态的对象:而saveOrUpdate则是把我们提供

MySQL开启federated引擎实现数据库表映射

1.查看federated引擎是否开启 点击进入Navicat并点击键盘上F6,出现命令行界面 ,输入指令:show engines; 2.开启federated引擎 Windows系统 : 在my.ini中加入federated 3.建立映射表 在服务器A上有MySQL数据库test_a,在服务器B上有MySQL数据库test_b.现在需要将test_a库中的user表数据映射到数据库test_b中.此时需要在数据库test_b中建立表user,注意ENGINE和CONNECTION. CRE

利用MySQL之federated引擎实现DBLink功能

有时候我们需要跨库join查询,但是配置多数据源成本又太高,Oracle提供了DBLink功能,MySQL中也有类似的实现:federated-engine. MySQL中使用federated引擎的表能够映射远程数据库的表,本地的这张表相当于远程数据库某表在本地的引用,在本地对表的操作能够实时的反应到远程表上,包括CRUD. 要实现首先需要开启本地库的federated引擎[远程数据库不需要任何配置],使用SHOW ENGINES;语句查询本地库是否开启了federated-engine:如果

mysql添加Federated引擎问题

现在我有这么一个需求, 就是有两个项目, 一个叫项目A,一个项目B, 由于A的用户表和B的用户表是要实现一样的. 例如: 我在A项目中注册了,要实现在B项目中也能登录 由于用到的数据是mysql, 那么可以使用Federated引擎实现这个需求. 环境 首先查询一下mysql中有没有Federated这个引擎.我有的是mysql5.7.22 show engines; 结果 mysql> show engines; +--------------------+---------+--------

MySQL中查询所有数据库占用磁盘空间大小和单个库中所有表的大小的sql语句

查询所有数据库占用磁盘空间大小的SQL语句: select TABLE_SCHEMA, concat(truncate(sum(data_length)/1024/1024,2),' MB') as data_size, concat(truncate(sum(index_length)/1024/1024,2),'MB') as index_size from information_schema.tables group by TABLE_SCHEMA order by data_lengt

项目产品化升级数据库脚本问题——如何查询两个数据库差异的库表或者数据

项目产品化能够解决svn版本问题,防止一个现场发现问题需要修改多套程序的问题.但是同时带来新的问题,在项目需求变化的时候或者升级一个产品的时候,对应的数据库脚本就成为关键,这里介绍一个解决方法--数据链对比法. 通过建立数据链对比缺少的库表以及各种配置数据.当然,如果在开发的时候就合理的管理的数据库脚本就不会存在这样的问题 步骤: 1.建立数据链,打开pl/sql,右键点击database_links--新建,填写信息即可,对应的sql语句为,这里我建一个名字叫TEST的数据链 -- Drop

MySQL数据库跨服务器数据同步

1.背景介绍最近公司项目要求与开源项目Zentao做数据对接,因为改动开源项目风险较大,采用将Zentao数据库的相关表与本地数据库同步的方案.由我测试方案的可行性.mysql版本:5.7.20.本地数据库A(作为Zentao数据库),本地数据库B,本地程序C:本地为Windows环境. 2.方案探索方案1项目经理的意思是在A中写触发器,表中数据变化时将ID发给C,由C在A中查询变化的数据,写入B.过程中需要安装mysql-udf-http插件(参考:https://www.2cto.com/d

从零开发分布式数据库中间件 一、读写分离的数据库中间件(转)

从零开发分布式数据库中间件 一.读写分离的数据库中间件 .embody { padding: 10px 10px 10px; margin: 0 -20px; border-bottom: solid 1px #ededed } .embody_b { margin: 0; padding: 10px 0 } .embody .embody_t,.embody .embody_c { display: inline-block; margin-right: 10px } .embody_t {