以博促学

煅造一只小钢炮

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

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

阅读更多
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010137431/article/details/49897695
文章标签: windows mysql federated
个人分类: --------【数据库】
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭