什么是MyCat
官方网站::http://www.mycat.org.cn/ http://www.mycat.io/ db proxy MycatMyCat 架构

MyCat 核心概念Schema
Schema:由它指定逻辑数据库(相当于MySQL的database数据库)Table
Table:逻辑表(相当于MySQL的table表)DataNode
DataNode:真正存储数据的物理节点DataHost
DataHost:存储节点所在的数据库主机(指定MySQL数据库的连接信息)User
User:MyCat的用户(类似于MySQL的用户,支持多用户)MyCat 主要解决问题

  1. 海量数据保存 2。查询优化

MyCat 对多数据库的支持

MyCat 分片策略
MyCAT支持水平分片与垂直分片:水平分片:一个表格的数据分割到多个节点上,按照行分隔。垂直分片:一个数据库中多个表格A,B,C,A存储到节点1上,B存储到节点2上,C存储到节点3 上。

MyCAT通过定义表的分片规则来实现分片,每个表格可以捆绑一个分片规则,每个分片规则指定一个分 片字段并绑定一个函数,来实现动态分片算法。Schema
Schema:逻辑库,与MySQL中的Database(数据库)对应,一个逻辑库中定义了所包括的Table。Table
Table:表,即物理数据库中存储的某一张表,与传统数据库不同,这里的表格需要声明其所存储的 逻辑数据节点DataNode。在此可以指定表的分片规则。DataNode
DataNode:MyCAT的逻辑数据节点,是存放table的具体物理节点,也称之为分片节点,通过 DataHost来关联到后端某个具体数据库上DataHost
DataHost:定义某个物理库的访问地址,用于捆绑到Datanode上MyCat 安装下载MyCat
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-
linux.tar.gz解压缩
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz进入mycat/bin,启动MyCat
- 启动命令:./mycat start
- 停止命令:./mycat stop
- 重启命令:./mycat restart
- 查看状态:./mycat status访问MyCat
使用mysql的客户端直接连接mycat服务。默认服务端口为【8066】
mysql -uroot -p123456 -h127.0.0.1 -P8066MyCat 分片配置schema.xml什么是schema.xml
schema.xml作为Mycat中重要的配置文件之一,管理着Mycat的逻辑库、表、分片规则、DataNode 以及DataHost之间的映射关系。弄懂这些配置,是正确使用Mycat的前提。schema 标签用于定义MyCat实例中的逻辑库 Table 标签定义了MyCat中的逻辑表 dataNode 标签定义了MyCat中的数据节点,也就是我们通常说所的数据分片。dataHost标签在mycat逻辑库中也是作为最底层的标签存在,直接定义了具体的数据库实例、读 写分离配置和心跳语句。Schema.xml 配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--
schema : 逻辑库 name:逻辑库名称
sqlMaxLimit:一次取多少条数据 要超过用limit xxx
table:逻辑表
dataNode:数据节点 对应datanode标签
rule:分片规则,对应rule.xml
subTables:子表
primaryKey:分片主键 可缓存
-->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<!-- auto sharding by id (long) -->
配置Server.xml
server.xml介绍
server.xml几乎保存了所有mycat需要的系统配置信息。最常用的是在此配置用户名、密码及权限。
server.xml配置
配置rule.xml
rule.xml里面就定义了我们对表进行拆分所涉及到的规则定义。我们可以灵活的对表使用不同的分片算
法,或者对表使用相同的算法但具体的参数不同。这个文件里面主要有tableRule和function这两个标
签。在具体使用过程中可以按照需求添加tableRule和function。
此配置文件可以不用修改,使用默认即可。
<table name="item" dataNode="dn1,dn2,dn3" rule="mod-long"
primaryKey="ID"/>
</schema>
<!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
/> -->
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<!--
dataHost : 数据主机(节点主机)
balance:1 :读写分离 0 :读写不分离
writeType:0 第一个writeHost写, 1 随机writeHost写
dbDriver:数据库驱动 native:MySQL JDBC:Oracle、SQLServer
switchType:是否主动读
1、主从自动切换 -1 不切换 2 当从机延时超过slaveThreshold值时切换为主读
-->
<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.24.129:3306" user="root"
password="root" >
</writeHost>
</dataHost>
</mycat:schema>配置server.xmlserver.xml 介绍
server.xml几乎保存了所有mycat需要的系统配置信息。最常用的是在此配置用户名、密码及权限。server.xml 配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="defaultSqlParser">druidparser</property>
</system>
<user name="mycat">
<property name="password">mycat</property>
<property name="schemas">TESTDB</property>
</user>
</mycat:server>配置rule.xml
rule.xml里面就定义了我们对表进行拆分所涉及到的规则定义。我们可以灵活的对表使用不同的分片算 法,或者对表使用相同的算法但具体的参数不同。这个文件里面主要有tableRule和function这两个标 签。在具体使用过程中可以按照需求添加tableRule和function。此配置文件可以不用修改,使用默认即可
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat=”http://io.mycat/“ >
<tableRule name="sharding-by-intfile">
<rule>
<columns>sharding_id</columns>
<algorithm>hash-int</algorithm>
</rule>
</tableRule>
<function name="hash-int"
class="io.mycat.route.function.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txt</property>
</function>
</mycat:rule>tableRule 标签配置说明:
name 属性指定唯一的名字,用于标识不同的表规则 rule 标签则指定对物理表中的哪一列进行拆分和使用什么路由算法。columns 内指定要拆分的列名字。algorithm 使用 function 标签中的 name 属性。连接表规则和具体路由算法。当然,多个表规则 可以连接到同一个路由算法上。table 标签内使用。让逻辑表使用这个规则进行分片。function 标签配置说明:
name 指定算法的名字。class 制定路由算法具体的类名字。property 为具体算法需要用到的一些属性。几个常用的分片规则连续分片日期列分区法
<!--按固定时间分片-->
<tableRule name="sharding-by-date">
<rule>
<columns>create_time</columns>
<algorithm>sharding-by-date</algorithm>
</rule>
</tableRule>
<function name="sharding-by-date"
class="io.mycat.route.function..PartitionByDate">
<property name="dateFormat">yyyy-MM-dd</property>
<property name="sBeginDate">2014-01-01</property>
<property name="sPartionDay">10</property>
</function>
<!--按自然月分片-->
<tableRule name="sharding-by-month">
<rule>
配置说明:
tableRule标签:
columns :标识将要分片的表字段
algorithm :指定分片函数
function标签:
dateFormat :日期格式
sBeginDate :开始日期
sPartionDay :分区天数,即默认从开始日期算起,分隔10天一个分区
二、范围约定
配置说明:
tableRule标签:
<columns>create_time</columns>
<algorithm>sharding-by-month</algorithm>
</rule>
</tableRule>
<function name="sharding-by-month"
class="io.mycat.route.function..PartitionByMonth">
<property name="dateFormat">yyyy-MM-dd</property>
<property name="sBeginDate">2014-01-01</property>
</function>
<!--
按单月小时分片
适合做日志,每月末,手工清理
-->
<tableRule name="sharding-by-hour">
<rule>
<columns>create_time</columns>
<algorithm>sharding-by-hour</algorithm>
</rule>
</tableRule>
<function name="sharding-by-hour"
class="io.mycat.route.function..LastestMonthPartition">
<property name="splitOneDay">24</property>
</function>
配置说明 tableRule标签:columns :标识将要分片的表字段 algorithm :指定分片函数 function标签:dateFormat :日期格式 sBeginDate :开始日期 sPartionDay :分区天数,即默认从开始日期算起,分隔10天一个分区范围约定
<tableRule name="auto-sharding-long">
<rule>
<columns>user_id</columns>
<algorithm>rang-long</algorithm>
</rule>
</tableRule>
<function name="rang-long"
class="io.mycat.route.function.AutoPartitionByLong">
<property name="mapFile">autopartition-long.txt</property>
</function>
配置说明 tableRule标签:columns :标识将要分片的表字段 algorithm :指定分片函数 function标签:mapFile :指定分片函数需要的配置文件名称
autopartition-long.txt文件内容:所有的节点配置都是从0开始,及0代表节点1,此配置非常简单,即预先制定可能的id范围对应某个分 片
# range start-end ,data node index
# K=1000,M=10000.
0-500M=0 0-100 0
500M-1000M=1 101-200 1
201-300 2
1000M-1500M=2
default=0
# 或以下写法
# 0-10000000=0
# 10000001-20000000=1
优势:扩容无需迁移数据 缺点:热点数据,并发受限离散分片枚举法
<tableRule name="sharding-by-intfile">
<rule>
<columns>user_id</columns>
<algorithm>hash-int</algorithm>
</rule>
</tableRule>
<function name="hash-int"
class="io.mycat.route.function.PartitionByFileMap">
<property name="mapFile">partition-hash-int.txt</property>
<property name="type">0</property>
<property name="defaultNode">0</property>
</function>
配置说明 tableRule标签:columns :标识将要分片的表字段 algorithm :指定分片函数 function标签:mapFile :指定分片函数需要的配置文件名称 type :默认值为0,0表示Integer,非零表示String defaultNode :指定默认节点,小于0表示不设置默认节点,大于等于0表示设置默认节点,0代表节 点1。
默认节点的作用:枚举分片时,如果碰到不识别的枚举值,就让它路由到默认节点。如果不配置默认节点(defaultNode值小于0表示不配置默认节点),碰到不识别的枚举值 就会报错:
partition-hash-int.txt 配置:
10000=0 列等于10000 放第一个分片
10010=1
男=0
女=1
beijing=0
tianjin=1
zhanghai=2求模法
<tableRule name="mod-long">
<rule>
<columns>user_id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long"
class="io.mycat.route.function.PartitionByMod">
<!-- how many data nodes -->
<property name="count">3</property>
</function>
tableRule标签:columns :标识将要分片的表字段 algorithm :指定分片函数 function标签:count :节点数量一致性hash
<tableRule name="sharding-by-murmur">
<rule>
<columns>user_id</columns>
<algorithm>murmur</algorithm>
</rule>
</tableRule>
<function name="murmur"
class="io.mycat.route.function.PartitionByMurmurHash">
<!-- 默认是0 -->
<property name="seed">0</property>
<!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
<property name="count">2</property>
<!-- 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数
的160倍 -->
<property name="virtualBucketTimes">160</property>
<!-- <property name="weightMapFile">weightMapFile</property> 节点的权重,没有指
定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为
key,以节点权重值为值。所有权重值必须是正整数,否则以1代替 -->
<!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property>
用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur
hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 -->
</function>

等,还有一些其他分片,这里,暂时不说明测试分片
把商品表分片存储到三个数据节点上。

创建表
配置完毕后,重新启动mycat。使用mysql客户端连接mycat,创建表。
CREATE TABLE item (
id int(11) NOT NULL,
name varchar(20) DEFAULT NULL,
PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8分片测试
分片策略指定为“auto-sharding-long” 分片规则指定为“mod-long”

mycat配置访问oracle_教程 | MySql都会了,确定不学习一下MyCat分片?相关推荐

  1. 教程 | MySql都会了,确定不学习一下MyCat分片?

    这是小小本周的第二篇,我是小小,本周将会介绍MyCat以及MyCat分片. MyCat 介绍 什么是MyCat 官方网站::http://www.mycat.org.cn/ http://www.my ...

  2. mycat配置访问oracle_MySQL:如何使用MyCAT实现分库分表?

    分库分表介绍 随着微服务这种架构的兴起,我们应用从一个完整的大的应用,切分为很多可以独立提供服务的小应用.每个应用都有独立的数据库. 数据的切分分为两种: 垂直切分:按照业务模块进行切分,将不同模块的 ...

  3. mysql 8.0.18安装,mysql 8.0.18 安装配置方法图文教程

    mysql 8.0.18 安装配置方法图文教程 本文记录了mysql 8.0.18 安装配置图文教程,供大家参考,具体内容如下 第一步:下载MySql 下载地址:MySQL 第二步:安装MySql 打 ...

  4. win10配置mysql8.0_Win10下mysql 8.0.20 安装配置方法图文教程

    Win10系统下MySQL 8.0.20安装和配置超详细教程 MySQL下载 MySQL直接去官网下载就行,选择community版本(免费)下载,链接. 在select operating syst ...

  5. 转载:mysql 5.7.10 安装配置方法图文教程——来自脚本之家网,作者是汤高

    mysql 5.7.10 安装配置方法图文教程 作者:汤高 字体:[增加 减小] 类型:转载 时间:2016-06-22 我要评论 这篇文章主要为大家分享了mysql 5.7.10 安装配置方法图文教 ...

  6. mysql windows 管道连接,科技常识:Windows Server 2016 MySQL数据库安装配置详细安装教程...

    今天小编跟大家讲解下有关Windows Server 2016 MySQL数据库安装配置详细安装教程 ,相信小伙伴们对这个话题应该也很关注吧,小编也收集到了有关Windows Server 2016 ...

  7. mysql 5.5 安装配置方法图文教程

    前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家.点击跳转到教程. 回忆一下mysql 5.5 安装配置方法,整理mysql 5.5 安装配置教程笔记,分享给大家. M ...

  8. mysql 5.720安装_MySQL 5.7.27下载安装配置的详细教程

    前言 在安装MySQL的时候会遇到很多问题,博客上有很多解决问题的办法,在这里我附上一些链接,遇到问题的朋友们可以阅读参考哈~本文主要针对于刚接触数据库的小白,来安装MySQL数据库.目前官网上的My ...

  9. mysql安装教程_mysql 5.5 安装配置方法图文教程

    回忆一下mysql 5.5 安装配置方法,整理mysql 5.5 安装配置教程笔记,分享给大家. 1.首先进入的是安装引导界面 2.然后进入的是类型选择界面,这里有3个类型:Typical(典型).C ...

最新文章

  1. 要强大的“黑匣子”,还是“可解释”的机器学习?| 清华AI Time激辩
  2. mysql字段掩码_在必须输入字母A~Z或数字0~9数据库中设计表时,如果将字段的输入掩码设置为“LLLL”,则该字段能够接受的输入是()_学小易找答案...
  3. list在codeblocks和vs2013中编译提示不同
  4. 呼市职称计算机考试时间,2016下半年内蒙古呼和浩特会计从业考试报名时间
  5. linux终端上网,ubuntu中上网-如何使用ubuntu下用命令行上网?ubuntu下用命令行上网, 爱问知识人...
  6. 用开源工具OCSNG管理资产信息
  7. leetcode 238. Product of Array Except Self | 238. 除自身以外数组的乘积(Java)
  8. Android开发之View双指缩放ViewGroup双指缩放视频双指缩放图片双指缩放
  9. 哪些设计模式最值得学习
  10. android 联系人批量插入,GitHub - Atinerlengs/InsertDemo: android 简单的批量插入通话记录、联系人、短信demo...
  11. java中动态代理的使用
  12. 学习使用资源文件[4] - 用资源中的图片做背景、使用 LoadFromResourceID
  13. html中%3ch3%3e有颜色吗,typo.html
  14. java mocked_java如何使用Mockito?
  15. jsplumb 系列(一)
  16. 解决不同浏览器文字间距不同的问题
  17. 小孔成像总结_干货 | 初中物理解题技巧+方法总结,非常实用,初二初三都要看!...
  18. 火绒安全v5.0.45 附单文件版
  19. 考CISP必须要做哪些准备?
  20. flash读xml实例教程

热门文章

  1. Java Integer的缓存策略
  2. JavaScript函数式编程之深入理解纯函数
  3. shell脚本练习(12.8)
  4. 2007注册会计师考试
  5. 零基础如何学好数据分析?
  6. visual c 语言参考手册pdf,Microsoft-Visual-C-6-0语言参考手册(三).pdf
  7. AQS.doReleaseShared
  8. MyBatis关键配置-接口的扫描注册
  9. MyBatis 插件原理与自定义插件-插件编写与注册
  10. MyBatis 实际使用案例-typeAliases