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

还是老问题

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

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

 

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

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

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

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

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

B库想访问A库的表a

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

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

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

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

mysql基于federated存储引擎访问远程数据库表_第1张图片

查看表的记录

mysql基于federated存储引擎访问远程数据库表_第2张图片

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

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

mysql基于federated存储引擎访问远程数据库表_第3张图片

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

mysql基于federated存储引擎访问远程数据库表_第4张图片

 

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:123456@localhost:3306/A/a'

 DEFAULT CHARSET=utf8 ; 

注意:

       ENGINE=FEDERATED指定引擎类型

       CONNECTION='mysql://root:123456@localhost:3306/A/a'指定连接的数据库和表信息

                 root:数据库用户名

                 123456:数据库密码

                 localhost:A库的访问地址

                 3306:A库的端口

                  A:数据库名称

                  a:表名

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

mysql基于federated存储引擎访问远程数据库表_第5张图片

 

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

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

 

问题:

1.数据库密码可能带有特殊字符,如@字符

遇见这种用上面的创建方法无法创建,会报错

可以使用如下解决方法

先创建一个链接服务

CREATE SERVER fedlink FOREIGN DATA WRAPPER mysql OPTIONS (
    USER 'root',   #数据库用户名
    PASSWORD '123456',  #数据库密码
    HOST '192.168.0.11', #数据库地址
    PORT 3306, #数据库端口
    DATABASE 'XXXXX' #数据库名
);

然后再创建表

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='fedlink/a'

 DEFAULT CHARSET=utf8 ; 

 

 

如果要删除FEDERATED连接,则只要使用drop table XXX即可,该操作会删除链接,但是原库的表不会有任何修改。

你可能感兴趣的:(数据库操作,J2EE开发,服务器,mysql,federated,存储引擎,多数据源,数据库)