当想从不同服务器的数据库获取数据时,我们会想到oracle的DBLink;sqlserver的链接访问(傻瓜式操作,按照步骤配置即可),那么mysql有没有跨服务器访问的功能呢?答案自然是有的。
博主这就分享给大家:
FEDERATED存储引擎:
可以链接其他数据库(本服务器或者不同服务器),通过创建表的方式关联数据库的表。
相当于一个镜像的作用,把要获取的表拷贝一份到本数据库(切记,拷贝的表字段只能少或者相同,不能比来源表的字段多)

首先查看有没有开启存储引擎:

show engines;

在这里插入图片描述
若是出现上图红圈中的部分;则说明没有开启FEDERATED存储引擎;若是Support的值为YES表示开启。
若是没有出现改行,则需要安装FEDERATED;(黑窗口登录mysql)命令如下:

install plugin federated soname 'ha_federated.so' 

然后在配置文件开启命令:
linux系统:找到my.cnf配置文件进行编辑:命令如下。

vi /etc/my.cnf

windows系统:在my.ini配置文件中(windows就不多说)。

不管是linux还是windows 逻辑都是一致

找到 [mysqld],在下面添加一行

federated=1

然后重启mysql–linux重启mysql命令:

3.1cd /etc/inint.d   
3.2: mysqld restart

再次查看mysql,会发现 存储引擎已经开启如下图(Support为YES表示已开启支持):
在这里插入图片描述
到此我们已经成功开启FEDERATED存储引擎!那么接下来就是使用了:

1:同服务器的不同数据库:

![在这里插入图片描述](https://img-blog.csdnimg.cn/c1640e33504d42fcbf666c5b0e6e7950.png

在相同服务器,如何访问不同数据库呢?
link_test数据库:获取数据从cynthia数据库;简称为A库
cynthia数据库:提供数据的数据库:简称为B库

创建完A库后,我们创建一个只有可读权限的用户,这是为了防止在A库操作B库的数据,这自然不是我们希望看到的。

A库从B库中获取的数据只有select的权限,只有独属于A库的数据才有完全操作的权限。

1:创建用户信息
在这里插入图片描述
2:配置服务器权限:只有读的权限(因为是本服务器的用户,所以在这里直接设置读权限,若是跨服务器则根据实际情况在权限里设置权限)
在这里插入图片描述
3:配置权限
在这里插入图片描述

4:创建关联表

CREATE TABLE `link_sys_user` (
  `user_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '用户ID',
  `user_type` varchar(2) DEFAULT '00' COMMENT '用户类型(00系统用户 01注册用户)',
  `create_by` varchar(64) DEFAULT '' COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  PRIMARY KEY (`user_id`) USING BTREE
) ENGINE=FEDERATED   CONNECTION='mysql://reader:reader123456@157.375.20.168:3306/cynthia/sys_user';


ENGINE=FEDERATED   CONNECTION='mysql://reader:reader123456@157.375.20.168:3306/cynthia/sys_user';
ENGINE=FEDERATED:使用存储引擎
reader :登录用户
reader123456 : 登录密码
157.375.20.168:要连接数据库的所在服务器ip
3306:要连接数据库的端口
cynthia:要连接的数据库
sys_user:做连接的表

***5: 如此可在link_sys_user执行select语句,获取的数据即为B库的数据***


跨服务器的数据库:步骤和同服务器端数据库一致。在配置的时候把ip替换成不同的服务器ip即可。

更多推荐