当想从不同服务器的数据库获取数据时,我们会想到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.1: cd /etc/inint.d
3.2: mysqld restart
再次查看mysql,会发现 存储引擎已经开启如下图(Support为YES表示已开启支持):
到此我们已经成功开启FEDERATED存储引擎!那么接下来就是使用了:
1:同服务器的不同数据库:
在相同服务器,如何访问不同数据库呢?
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即可。