【MySQL】跨服务器访问数据(Windows版)

原创 2015年11月18日 00:55:43

1. 简介

  mysql 提供了一个类似Oracle中的数据库链接(DBLINK)功能的存储引擎–FEDERATED。当我们创建一个以FEDERATED为存储引擎的表时,服务器在数据库目录只创建一个表定义文件。文件由表的名字开始,并有一个frm扩展名。无其它文件被创建,因为实际的数据在一个远程数据库上。这不同于为本地表工作的存储引擎的方式。
  对本地的Federated存储表操作增删改,实际上这些命令都被发到主服务器上的数据库执行,本地的Federated存储表会映射最新的远程数据;

2. 安装Federated

1) 进入cmd命令行下, 切换到mysql安装文件夹的bin目录

mysql -uroot -p

输入密码后进行mysql;
2) 查看mysql是否启动federated支持;如果为yes就是已启用,不用再配置其他东西,可直接建立federate存储表;

3)修改my.ini文件
  强调不是my-default.ini文件;my.ini是在mysql data文件夹下(不是在mysql install文件夹下);

my.ini位置

  方法2,cmd下查找my.ini

show variables like 'datadir'

  然后,在文件中只需添加一个单词,注意位置;

4)重启mysql, show engines; 会发现federated那一行是YES。

3. 建立federated存储表

3.1 了解federated存储表

3.1.1 FEDERATED存储引擎的局限性

  • FEDERATED表指向的远程表在你通过FEDERATED表访问它之前必须存在。
  • 一个FEDERATED表指向另一个FEDERATED表是可能的,但是你必须小心不要创建一个循环。
  • 没有对事务的支持。
  • 如果远程表已经改变,对FEDERATED引擎而言是没有办法知道的。这个的原因是因为这个表必须象数据文件一样工作,除了数据库其它任何都不会被写入。如果有任何对远程数据库的改变,本地表中数据的完整性可能会被破坏。
  • FEDERATED存储引擎支持SELECT, INSERT, UPDATE, DELETE和索引。它不支持ALTER TABLE, DROP TABLE或任何其它的数据定义语言语句。当前的实现不使用预先准备好的语句。
  • 执行使用SELECT, INSERT, UPDATE和DELETE,但不用HANDLER。
  • FEDERATED表不能对查询缓存不起作用。
  • 这些限制中的一些在FEDERATED处理机的将来版本可能被消除。

3.2 远程服务器上的mysql数据库结构

demo

DROP TABLE IF EXISTS `manage_number`;
CREATE TABLE `manage_number` (
  `increment_id` int(11) NOT NULL AUTO_INCREMENT,
  `attend_date` varchar(255) DEFAULT NULL,
  `group_id` int(11) DEFAULT NULL,
  `participant_num` int(11) DEFAULT NULL,
  `student_id` int(11) DEFAULT NULL,
  `subject` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`increment_id`)
) ENGINE=InnoDB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

3.3 本地federated存储表

demo

CREATE TABLE `manage_number` (
  `increment_id` int(11) NOT NULL AUTO_INCREMENT,
  `attend_date` varchar(255) DEFAULT NULL,
  `group_id` int(11) DEFAULT NULL,
  `participant_num` int(11) DEFAULT NULL,
  `student_id` int(11) DEFAULT NULL,
  `subject` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`increment_id`)
) ENGINE=FEDERATED DEFAULT CHARSET=utf8 
CONNECTION='mysql://root:root@192.168.1.61:3306/exammanage/manage_firnumber';

加上MySQL的授权,允许别人看,但不能对主数据表进行操作,可以

> grant select 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 等,具体权限间用“,”半角逗号分隔。

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

mysql跨服务器查询

MySQL FEDERATED引擎使用示例, 类似Oracle DBLINK 2013-8-22 10:34| 发布者: 天空之城| 查看: 16547| 评论: 0|原作者: Sansom...

两不同服务器上的mysql跨库查询

业务场景:关联不同数据库中的表的查询 比如说,要关联的表是:机器A上的数据库A中的表A && 机器B上的数据库B中的表B。 这种情况下,想执行“select A.id,B.id from ...

【已解决】Navicat 远程连接 Linux服务器上的MySQL数据库

授权法:    在安装mysql的机器上运行:    1、# ./bin/mysql -uroot -p    //这样应该可以进入MySQL服务器    2、mysql> ...

MYSQL跨服务器操作数据库表

因为牵扯到两台服务器之间,相互核对数据。所以找了些研究了下这个技术。技术分享 在另一片文章中,内容是说主从服务器配置, 这个有个局限就是会自动同步数据,不可控! 以下为配置过程步骤:  /***...

mysql 跨服务器快速复制包含大量数据的表

源数据库ip:src_ip 目标数据库ip:dest_ip 首先登陆
  • sdcxyz
  • sdcxyz
  • 2014年07月19日 11:41
  • 6005

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

在实际项目中经常回遇到跨服务器同步数据的问题,经查阅资料总结以下步骤(已验证): 1、环境背景: 数据库版本:5.6 操作系统:win7 64位(该方法同样适用于32位操作系统) 主服务器:192.1...
  • sdhyfxh
  • sdhyfxh
  • 2015年05月04日 15:59
  • 3133

mysql数据库跨服务器查询【需要确定mysql支持FEDERATED ,可以参照文章内容自己配置】

现有两台MYSQL数据库 一台是192.168.1.1 端口3306 上有数据库DB1 有表TABLE1 一台是192.168.1.2 端口3307 上有数据库DB2 有表TABLE2 192.168...

sql 跨数据库访问

一、跨数据库访问 第一种方式 SELECT * FROM OPENDATASOURCE(  'SQLOLEDB',  'Data Source=远程ip;User ID=sa;Password...

SQL总结之跨数据库服务器之间的数据访问(MSSQL)

跨数据服务器访问数据,有什么用呢?它主要用于不同系统间的在数据库层面的数据同步。 MSSQL可以创建对其它数据库的链接,像访问本地数据库一样访问远程数据库中对象(表、存储过程等),创建链接的方式有两种...

Mysql使用Federate引擎实现操作本地表映射远程操作表

考虑这样一个场景,存在多台agent系统(每台均拥有自己的数据库)各自做完操作后,将会触发各自数据库的存储过程进行复杂运算,各自完成后均需要向远程某Master机器的数据库的表中擦入一条信息,以通知操...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【MySQL】跨服务器访问数据(Windows版)
举报原因:
原因补充:

(最多只允许输入30个字)