美文网首页
「转」Mysql数据库分库后跨库join解决方案

「转」Mysql数据库分库后跨库join解决方案

作者: 烧饼丨灬 | 来源:发表于2019-12-03 11:00 被阅读0次

一、前言

近几个月项目中数据库开始分库了,把一个原本60多张表的数据库分成了6个部分,每个部分有自己业务之内的表,整个数据库只是物理分开,逻辑依然是链接的,通过mycat这个数据库中间件对整个数据库进行路由转发。但是分库后随之而来的问题之一就是跨库join,可以说网上的解决方案已经烂大街了。但是小编还是觉得有必要总结分析一下。

二、数据库结构示例

为了公司数据保密,小编建立两个新的数据库,来做这个实验。

数据库db1 

只有一个t_student表,表中有db2中的t_school表的外键

数据库db2

只有t_school表

三、如何进行跨库连表查询呢?

就上面的考虑来看,我想要查询到这个学生的信息和所在学校的信息,如果t_student和t_school在一个库中,就可以通过join进行查询:

但是,现在两张表不在一个数据库中,如何解决呢?有没有跨库查询SQL Join的语句呢?

解决方案】

3.1 开启FEDERATED引擎

Mysql的常见的引擎类型有MyIsam,InnoDB等。并且我们可以通过show engines;命令来查看,数据库支持的所有的引擎。

如果要想实现跨库Join查询,我们可以使用FEDERATED引擎来实现。但是默认情况下,FEDERATED引擎是关闭的,所以就需要我们去my.cnf的配置文件中进行相关的配置。

在my.cnf 文件中添加federated,然后重启启动mysql服务

my.cnf:

重启mysql服务

3.2 建立链接表

限制:

1.本地结构字段可以是远程表的部分字段,字段必须相同

2.不支持事务

3.不支持表结构修改

建表语句格式:

CREATE TABLE xxx(...) ENGINE=FEDERATED CONNECTION='mysql://[name]:[password]@[location]:[port]/[db-name]/[table-name]'

说明: 

name:远程数据库账号 

password:远程数据库密码 

location:远程数据库Ip地址 

port:数据库端口 

db-name:数据库名字 

table-name:表名

【例子】 

建立链接t_school表:

CREATE TABLE `t_school` (

`id` varchar(22) NOT NULL,

`school_name` varchar(20) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=FEDERATED DEFAULT CHARSET=latin1 COMMENT='学校表-链接表' CONNECTION='mysql://root:root@192.168.22.177:3306/db2/t_school';

经过这些步骤,我们就把另外一个库的表,链接到了我们操作的库上了。这样就可以使用JOIN等语句,间接进行跨库操作啦

四、一些操作

4.1 更新本地链接表

update t_school set school_name ='langfang' where id ='1'

对本地进行更新操作,本地和远程数据库都改变了。

4.2 增加字段

alter table t_school add column idtest INT DEFAULT 0;

错误:federated存储引擎不支持alter table 操作

4.3 删除表

删除表

drop table t_school;

删除本地表对远程表无影响

五、小结

数据库的操作还是有很多的,有问题就解决问题,操作就是这样。加油!

相关文章

  • 「转」Mysql数据库分库后跨库join解决方案

    一、前言 近几个月项目中数据库开始分库了,把一个原本60多张表的数据库分成了6个部分,每个部分有自己业务之内的表,...

  • MySQL高级

    分库分表 分库后问题 跨库跨表join问题全局表,基础数据配置数据所有库都拷贝一份字段冗余系统层组装,业务层分别查...

  • Mysql的分库分表,水平拆分-垂直拆分

    参考文章MySQL分库分表总结参考数据库分库分表策略,如何分库,如何分表?MySQL分库分表原理 MySQL单库数...

  • mysql分库分表

    业务分库 按照业务分库,比如用户、商品、订单分库带来的问题 join 问题不在同一数据库无法join,只能先查一个...

  • 利用RadonDB实现MySQL分库分表

    利用RadonDB实现MySQL分库分表 RadonDB是青云上提供的MySQL分布式解决方案,提供数据库的透明拆...

  • (转载)MySQL数据库之互联网常用分库分表方案

    MySQL数据库之互联网常用分库分表方案 一、数据库瓶颈 1、IO瓶颈 2、CPU瓶颈 二、分库分表 1、水平分库...

  • JOIN 把表连接起来

    启动 mysql 创建数据库 创建表 创建记录 使用 inner join left join right joi...

  • MySQL数据迁移工具的设计与实现

    一、背景 MySQL作为最流行的关系型数据库产品之一,当数据规模增大遭遇性能瓶颈时,最容易想到的解决方案就是分库分...

  • MySQL单表数据量过千万如何优化(转)

    转自MySQL单表数据量过千万,采坑优化记录,完美解决方案 问题概述 使用阿里云rds for MySQL数据库(...

  • MySQL的分库分表

    MySQL的分库分表 概述 简单的来说分库分表就是通过某种特定的条件,将存放在同一数据库中的数据分散在多个数据库中...

网友评论

      本文标题:「转」Mysql数据库分库后跨库join解决方案

      本文链接:https://www.haomeiwen.com/subject/doccgctx.html