文章目录

  • 1.MyCat
    • 1.1.MyCat简介
    • 1.2.Mycat对多数据库的支持
    • 1.3.MyCAT架构
    • 1.4.MyCat分库分表
    • 1.5.MyCat下载与安装
      • 1.5.1.下载mycat
      • 1.5.2.安装Mycat
  • 2.Mycat分库分表和读写分离
    • 2.1.需求
    • 2.2.安装环境
    • 2.4.MyCat重要概念
    • 2.5. 配置schema.xml
      • 2.5.1.Schema.xml介绍
      • 2.5.2.Schema.xml配置
    • 2.6. 配置server.xml
      • 2.6.1.server.xml介绍
      • 2.6.2.server.xml配置
    • 2.7.配置rule.xml
      • 2.7.1.分片规则
        • (1).auto-sharding-long 规则
        • (2).crc32slot 规则
      • 2.7.2.rule.xml配置
    • 2.8.测试
      • 2.8.1.创建库
      • 2.8.2.创建表并插入数据
      • 2.8.3.分表测试
      • 2.8.4.项目测试

1.MyCat

1.1.MyCat简介

MyCAT是一个数据库中间件。国产开源项目,前身是cobar项目。

1.2.Mycat对多数据库的支持

1.3.MyCAT架构

如图所示:MyCAT使用Mysql的通讯协议模拟成了一个Mysql服务器,所有能使用Mysql的客户端以及编程语言都能将MyCAT当成是Mysql Server来使用,不必开发新的客户端协议。

1.4.MyCat分库分表

垂直分割(分库):指按照业务将表进行分类,分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面,如下图:

把usian拆成3个库

水平分割(分表):一个表格的数据按照行分割到多个节点上,如图:

把tb_order表拆分到3个数据库里

典型的分片规则:

​ 根据主键编号进行hash、求余,如图

1.5.MyCat下载与安装

1.5.1.下载mycat

官方网站:http://www.mycat.org.cn/

github地址:https://github.com/MyCATApache

1.5.2.安装Mycat

1、把MyCat的压缩包上传到linux服务器

2、解压缩,得到mycat目录

[root@centos upload]# tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local

3、启动和关闭MyCat

进入mycat/bin,启动MyCat
启动命令:./mycat start
停止命令:./mycat stop
重启命令:./mycat restart
查看状态:./mycat status

注意:可以使用mysql的客户端直接连接mycat服务。默认服务端口为8066

2.Mycat分库分表和读写分离

2.1.需求

把表分片存储到三个数据节点上。

2.2.安装环境

mysql节点1环境

操作系统版本 : centos6.5
数据库版本 :mysql-5.6
数据库名 : db1
ip:192.168.25.134

mysql节点2环境

操作系统版本 :centos6.5
数据库版本 :mysql-5.6
数据库名 : db2
ip:192.168.25.135

mysql节点3环境

操作系统版本 :centos6.5
数据库版本 :mysql-5.6
数据库名 : db3
ip:192.168.25.136

mycat节点环境

操作系统版本 :centos6.5
mycat版本:1.6release
ip:192.168.25.137

2.4.MyCat重要概念

1、逻辑库(schema):一个包含了所有数据库的逻辑上的数据库2、逻辑表(table):一个包含了所有表的逻辑上的表3、数据主机(dataHost):数据库软件安装到哪个服务器上4、数据节点(dataNode):服务器上的mysql5、分片规则(rule):拆分规则

2.5. 配置schema.xml

2.5.1.Schema.xml介绍

Schema.xml作为MyCat中重要的配置文件之一,管理着MyCat的逻辑库、表、分片规则、DataNode以及DataHost。

2.5.2.Schema.xml配置

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/"><schema name="power_shop" checkSQLschema="false" sqlMaxLimit="100"><table name="tb_content" dataNode="dn1,dn2,dn3" rule="crc32slot" /><table name="tb_content_category" dataNode="dn1,dn2,dn3" rule="crc32slot1"/><table name="tb_item" dataNode="dn1,dn2,dn3" rule="crc32slot2" /><table name="tb_item_cat" dataNode="dn1,dn2,dn3" rule="crc32slot3" /><table name="tb_item_desc" dataNode="dn1,dn2,dn3" rule="crc32slot4"  /><table name="tb_item_param" dataNode="dn1,dn2,dn3" rule="crc32slot5"  /><table name="tb_item_param_item" dataNode="dn1,dn2,dn3" rule="crc32slot6" /><table name="tb_order" dataNode="dn1,dn2,dn3" rule="crc32slot7" /><table name="tb_order_item" dataNode="dn1,dn2,dn3" rule="crc32slot8" /><table name="tb_order_shipping" dataNode="dn1,dn2,dn3" rule="crc32slot9" /><table name="tb_user" dataNode="dn1,dn2,dn3" rule="crc32slot10" /><table name="de_duplication" dataNode="dn1,dn2,dn3" rule="crc32slot11" /><table name="local_message" dataNode="dn1,dn2,dn3" rule="crc32slot12" /></schema><dataNode name="dn1" dataHost="localhost1" database="db1" /><dataNode name="dn2" dataHost="localhost1" database="db2" /><dataNode name="dn3" dataHost="localhost1" database="db3" /><dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100"><heartbeat>select user()</heartbeat><writeHost host="hostM1" url="192.168.233.137:3306" user="root" password="1111"><readHost host="hostS2" url="192.168.233.138:3306" user="root" password="1111" /></writeHost></dataHost>
</mycat:schema>

2.6. 配置server.xml

2.6.1.server.xml介绍

server.xml几乎保存了所有mycat需要的系统配置信息。最常用的是在此配置用户名、密码及权限。

2.6.2.server.xml配置

<user name="root"><property name="password">1111</property><property name="schemas">power_shop</property>
</user><user name="user"><property name="password">1111</property><property name="schemas">power_shop</property><property name="readOnly">true</property>
</user>

2.7.配置rule.xml

2.7.1.分片规则

(1).auto-sharding-long 规则

以 500 万为单位,实现分片规则:
1-500 万保存在 db1 中, 500 万零 1 到 1000 万保存在 db2 中,1000 万零 1 到 1500 万保存在 db3 中.

(2).crc32slot 规则

在 CRUD 操作时,根据具体数据的 crc32 算法计算,数据应该保存在哪一个dataNode 中

2.7.2.rule.xml配置

1)<columns>id</columns>中推荐配置主键列2)所有的 tableRule 只能使用一次。如果需要为多个表配置分片规则,那么需要在此重新定义该规则。3) 要分片的数据库节点数量,必须指定,否则没法分片
<tableRule name="crc32slot1"><rule><columns>id</columns><algorithm>crc32slot</algorithm></rule>
</tableRule>
<tableRule name="crc32slot2"><rule><columns>id</columns><algorithm>crc32slot</algorithm></rule>
</tableRule>
<tableRule name="crc32slot3"><rule><columns>id</columns><algorithm>crc32slot</algorithm></rule>
</tableRule>
<tableRule name="crc32slot4"><rule><columns>item_id</columns><algorithm>crc32slot</algorithm></rule>
</tableRule>
<tableRule name="crc32slot5"><rule><columns>id</columns><algorithm>crc32slot</algorithm></rule>
</tableRule>
<tableRule name="crc32slot6"><rule><columns>id</columns><algorithm>crc32slot</algorithm></rule>
</tableRule>
<tableRule name="crc32slot7"><rule><columns>order_id</columns><algorithm>crc32slot</algorithm></rule>
</tableRule>
<tableRule name="crc32slot8"><rule><columns>id</columns><algorithm>crc32slot</algorithm></rule>
</tableRule>
<tableRule name="crc32slot9"><rule><columns>order_id</columns><algorithm>crc32slot</algorithm></rule>
</tableRule>
<tableRule name="crc32slot10"><rule><columns>id</columns><algorithm>crc32slot</algorithm></rule>
</tableRule>
<tableRule name="crc32slot11"><rule><columns>tx_no</columns><algorithm>crc32slot</algorithm></rule>
</tableRule>
<tableRule name="crc32slot12"><rule><columns>tx_no</columns><algorithm>crc32slot</algorithm></rule>
</tableRule>
<function name="crc32slot" class="io.mycat.route.function.PartitionByCRC32PreSlot"><property name="count">3</property><!-- 要分片的数据库数量,必须指定,否则没法分片 -->
</function>

2.8.测试

2.8.1.创建库

在主数据库中分别创建db1、db2、db3

2.8.2.创建表并插入数据

配置完毕后,重新启动mycat。

使用mysql客户端连接mycat,创建表并插入数据。

2.8.3.分表测试

2.8.4.项目测试

1、修改数据库url

spring:application:name: power-shop-itemdatasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://192.168.233.139:8066/power_shop?characterEncoding=UTF-8username: rootpassword: 1111type: com.alibaba.druid.pool.DruidDataSource

2、测试

MyCat分库分表和读写分离相关推荐

  1. mycat分库分表与读写分离

    mycat分库分表与读写分离 Dockerfile搭建mycat 1.创建mycat的配置文件 #新建目录 mkdir /docker/mycat#切换目录 cd /docker/mycat#下载my ...

  2. 主从复制MySQL的安装和用数据库中间件MyCat实现分库分表、读写分离

    1.MySql主从复制 1.1.安装mysql 1.1.1.下载 下载地址:https://dev.mysql.com/downloads/mysql/ 1.1.2.卸载预装mysql #查看已安装: ...

  3. 开源分布式数据库中间件MyCat架构简介(二)——基于MyCat的分库分表,读写分离,水平切分和垂直切分实现原理

    目录 前言 基于MyCat的分库分表,读写分离,水平切分和垂直切分实现原理 一.关于Mycat 二.Mycat 实现原理 三.MyCat 应用场景 四.MyCat 未来展望 五.Mycat 中相关概念 ...

  4. 面试精讲之面试考点及大厂真题 - 分布式专栏 16 数据库如何做分库分表,读写分离

    16 数据库如何做分库分表,读写分离 宝剑锋从磨砺出,梅花香自苦寒来. --佚名 引言 2016年第一次接触分布式微服务项目后,我在简历上写了我使用了微服务.分库分表技术,那么问题来了,面试官说接下来 ...

  5. 数据库分库分表、读写分离的原理和实现,以及使用场景

    2019独角兽企业重金招聘Python工程师标准>>> 为什么要分库分表和读写分离? 类似淘宝网这样的网站,海量数据的存储和访问成为了系统设计的瓶颈问题,日益增长的业务数据,无疑对数 ...

  6. 【Spring Boot 实战】数据库千万级分库分表和读写分离实战

    一. 前言 前几天时间写了如何使用Sharding-JDBC进行分库分表和读写分离的例子,相信能够感受到Sharding-JDBC的强大了,而且使用配置都非常干净.官方支持的功能还很多功能分布式主键. ...

  7. 使用 Sharding-Jdbc 实现分库分表、读写分离(未完待续)

    先贴代码, 回头讲解.未完待续 规划 实现分库分表.读写分离. 准备两张表:svc_order, svc_order_item 结构如下,可以想象成是未实施分库分表之前的数据库结构: CREATE D ...

  8. springboott整合mybatis-plus和sharding-jdbc实现分库分表和读写分离(含完整项目代码)

    springboott整合mybatis-plus和sharding-jdbc实现分库分表和读写分离(含完整项目代码) 一.整合sharding-jdbc 关于springboot整合sharding ...

  9. 利用Mycat中间件实现RDS MySQL的分库分表及读写分离功能

    https://aws.amazon.com/cn/blogs/china/mycat-rds-mysql/ 随着移动互联网的兴起和大数据的蓬勃发展,系统的数据量正呈几何倍数增长,系统的压力也越来越大 ...

最新文章

  1. Qt中文手册 之 QTreeWidgetItem
  2. Android ScrollView嵌套RecyclerView导致在三星s8曲面屏显示不全问题
  3. 技术分享:如何避免ajax重复请求?
  4. a标签传值到另一个页面_Vue组件传值与通信集合
  5. tcp接口测试工具_你不了解的,完整“接口测试”与服务虚拟化
  6. 2017计算机应用技术考研,2017年中国科学技术大学081203计算机应用技术考研专业目录与考试科目.docx...
  7. 一个小栗子聊聊JAVA泛型基础
  8. Not so Mobile(二叉树递归输入同时建树){天平}
  9. java实现打印直角三角形
  10. 电源模块的6个优势及其作用
  11. App后台开发运维和架构实践学习总结(9)——三种常见的API设计错误及解决方案
  12. ffmpeg视频的翻转vflip、hflip,旋转rotate、transpose、
  13. Leetcode13. 罗马数字转整数Leetcode14. 最长公共前缀Leetcode15. 三数之和Leetcode16. 最接近的三数之和Leetcode17. 电话号码的字母组合
  14. 第五届“强网”拟态防御国际精英挑战赛——线上预选赛火热开赛!
  15. x3g格式 3d打印_10款最受欢迎3D建模软件大搜罗!看看有没有你常用的软件?
  16. 会声会影找不到MSVCP100.dll、MSVCR100.dll时怎么办?(其他软件也适合使用)
  17. Aleo的PoSW共识
  18. 淘宝开放平台-速卖通客户店铺数据获取
  19. android 内存管理 ion,Android学习之ION memory manager
  20. 计算机影视教学大纲,影视剪辑-授课计划.doc

热门文章

  1. 2016 province java c-1 有奖竞猜
  2. STM32F4 discovery 开发板 UART1 问题
  3. GoldenDict使用说明
  4. Ubuntu 触摸板(touchpad) 右键失效
  5. Solidworks提示字体Arial Unicode MS安装不正确,PDF文件中一个或多个文本字串可能遗失怎么办...
  6. CAD转Excel该如何转换呢?
  7. 《孙子初问世》--游戏策划书
  8. 物联网大学生创新创业项目
  9. 教程//Windows系统滑动关机
  10. Cesium计算当前比例尺