Mysql跨服务器查询
最近遇到一个问题,需要在两个服务上的两个数据库进行联表查询,本以为一两句SQL语句就能把问题解决,后来发现没有这么简单。
原因很简单,Mysql虽然支持同一服务器上跨数据库的联表查询(我用的版本是5.0,经证实可行),但并不支持跨服务器。网上有一些跨服务器联表查询的SQL语句,但都是SQL SERVER的,并不适合MYSQL。后来用Hibernate配了两个数据源,想用HQL来查询,结果失败(后来才发现虽然是配了两个数据库,但是还是用的2个seesion)。于是经过大半天的Search和Practise,发现至少有两种解决方法。
以前做数学题,老是要进行 化归,即把未知的、不懂的转化为自己已知的来进行解决、实现。
第一种、程序层的解决方法
比较笨,但是操作起来却很简单。你想想,MYSQL不能帮你联表查,但是可以分开查询,把两个结果先记录下来,让JAVA语句来执行联表关系的操作,若还需要更新,再把最后的结果分别更新到两个服务器上。这种方法虽然效率低,但是容易理解,易于实现。
第二种、数据库层的解决方法
1、简单来说,先将A服务器数据库中需用到的表导出,导入B服务器上数据库,查询,若有更新再返回去 (貌似Mysql里面有个叫同步复制,有兴趣的朋友可以去查一下参考文档)
2、也可以使用MySQL FEDERATED存储引擎
其实他的原理和第二种方法一样,只不过不用手动而,须要配置一下,网上有很多介绍怎么用的例子,我就不多述了
其实支持这方面的插件已经有了,不过有兴趣的朋友可以自己尝试一下
最近遇到一个问题,需要在两个服务上的两个数据库进行联表查询,本以为一两句SQL语句就能把问题解决,后来发现没有这么简单。
原因很简单,Mysql虽然支持同一服务器上跨数据库的联表查询(我用的版本是5.0,经证实可行),但并不支持跨服务器。网上有一些跨服务器联表查询的SQL语句,但都是SQL SERVER的,并不适合MYSQL。后来用Hibernate配了两个数据源,想用HQL来查询,结果失败(后来才发现虽然是配了两个数据库,但是还是用的2个seesion)。于是经过大半天的Search和Practise,发现至少有两种解决方法。
以前做数学题,老是要进行 化归,即把未知的、不懂的转化为自己已知的来进行解决、实现。
第一种、程序层的解决方法
比较笨,但是操作起来却很简单。你想想,MYSQL不能帮你联表查,但是可以分开查询,把两个结果先记录下来,让JAVA语句来执行联表关系的操作,若还需要更新,再把最后的结果分别更新到两个服务器上。这种方法虽然效率低,但是容易理解,易于实现。
第二种、数据库层的解决方法
1、简单来说,先将A服务器数据库中需用到的表导出,导入B服务器上数据库,查询,若有更新再返回去 (貌似Mysql里面有个叫同步复制,有兴趣的朋友可以去查一下参考文档)
2、也可以使用MySQL FEDERATED存储引擎
其实他的原理和第二种方法一样,只不过不用手动而,须要配置一下,网上有很多介绍怎么用的例子,我就不多述了
其实支持这方面的插件已经有了,不过有兴趣的朋友可以自己尝试一下
![](https://i-blog.csdnimg.cn/blog_migrate/b8ea3f2510f2b235ae31aa1e9e3ef588.gif)