mysql基于federated存储引擎访问远程数据库表

还是老问题

最近在开发一个项目,需要访问另一个项目的数据,由于两个数据库是部署在同一个服务器上,且本项目只是对另一数据读取,因此决定在项目中使用双数据源配置进行访问。

如果是想在代码中做双数据源配置,可以查看我的另一篇文章:SpringMVC双数据源配置

 

今天我这边要讲的是另一种方式,mysql基于federated存储引擎访问远程数据库表

基于这种方式,从程序角度来看,只需要访问一个数据库即可。

但是这个是有一个前置条件:两个数据库都必须是mysql数据库,且被访问的表必须是可以通过网络访问到的(同一台机器也好,同一个局域网也好,走外网映射也好,总之要能被访问就是了)

好了,话不多说,马上开始。

假设有A和B两个数据库。

B库想访问A库的表a

1、先开启B库的federated存储引擎    

查看数据库的federated存储引擎是否开启;

方法一、打开mysql的命令行客户端,输入show engines;

方法二、打开navicate,在information_schema中找到ENGINES表

查看表的记录

显示NO就表示没打开,需要打开;

打开MYSQL的my.ini文件,进行编辑,在[mysqld]标签下添加federated,具体如下

设置完后重启mysql服务,即可。

 

2、在B库中添加数据表

CREATE TABLE `a` (

  `id` varchar(64) NOT NULL ,

  `no` varchar(32) DEFAULT NULL ,

  `name` varchar(64) DEFAULT NULL ,

  `start_time` varchar(128) DEFAULT NULL ,

  `end_time` varchar(128) DEFAULT NULL 

) ENGINE=FEDERATED

 CONNECTION='mysql://root:[email protected]:3306/A/a'

 DEFAULT CHARSET=utf8 ; 

注意:

       ENGINE=FEDERATED指定引擎类型

       CONNECTION='mysql://root:[email protected]:3306/A/a'指定连接的数据库和表信息

                 root:数据库用户名

                 123456:数据库密码

                 localhost:A库的访问地址

                 3306:A库的端口

                  A:数据库名称

                  a:表名

 创建完后就看到B库有a表,可以进行查询和修改,具体的访问权限是根据CONNECTION里面的数据库用户权限来决定的。

 

到此,程序就可以直接通过B库访问和修改A库中的a表。

比起SpringMVC双数据源配置,这种方式相对是比较简单的,而且这个是可以关联多个数据库的。