Mycat分布式数据库中间件 what why how

目录

What is Mycat?

1.概念?

2. 同类产品?

3. 解决了什么问题?

4.如何解决的? 拆分

5. 拆分策略

6.拆分带来的问题及如何解决 

 How to use Mycat?

 mycat中的核心概念及配置文件分析

 1.schema.xml

2. rule.xml

3.server.xml

Demo 

小结


What is Mycat?

1.概念?

Mycat 是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。 

2. 同类产品?

 mycat、TDDL、Sharding-JDBC、cobar

3. 解决了什么问题?

 超大容量问题

性能问题

多租户问题:多租户技术也叫多重租凭技术,就是在确保用户间数据隔离的前提下实现在多用户环境中共用相同系统或程序等软硬件资源的一种软件架构技术。

4.如何解决的? 拆分

 

5. 拆分策略

 

 

6.拆分带来的问题及如何解决 

 

 How to use Mycat?

 mycat中的核心概念及配置文件分析

 1.schema.xml

     涵盖了MyCat的逻辑库、表、分片规则、分片节点及数据源。

    逻辑表(逻辑数据库中的表)

 配置文件标签的含义

 

 

2. rule.xml

  定义的各种分片规则

3.server.xml

  server.xml 包含mycat的系统配置信息,它有两个标签,分别是user和system,掌握system标签的各项配置属性是mycat调优的关键。

Demo 

 我们现在做一个主从、读写分离,简单分表的示例。

服务器IP说明
Mycat192.168.0.2mycat服务器,连接数据库时,连接此服务器
database1192.168.0.3物理数据库1,真正存储数据的数据库
database2192.168.0.4物理数据库2,真正存储数据的数据库

Mycat作为主数据库中间件,肯定是与代码弱关联的,所以代码是不用修改的,使用Mycat后,连接数据库是不变的,默认端口是8066。连接方式和普通数据库一样,如:jdbc:mysql://192.168.0.2:8066/ 

server.xml示例

<user name="test">
        <property name="password">test</property>  
        <property name="schemas">lunch</property>  
        <property name="readOnly">false</property>  
        
        <!-- 表级 DML 权限设置 -->
        <!--        
        <privileges check="false">
            <schema name="TESTDB" dml="0110" >
                <table name="tb01" dml="0000"></table>
                <table name="tb02" dml="1111"></table>
            </schema>
        </privileges>       
         -->
    </user>

重点关注下面这段,其他默认即可。

参数说明
user用户配置节点
--name登录的用户名,也就是连接Mycat的用户名
--password登录的密码,也就是连接Mycat的密码
--schemas数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs
--privileges配置用户针对表的增删改查的权限,具体见文档吧

 我这里配置了一个账号test 密码也是test,针对数据库lunch,读写权限都有,没有针对表做任何特殊的权限。

schema.xml:schema.xml是最主要的配置项,首先看我的配置文件。

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

<!-- 数据库配置,与server.xml中的数据库对应 -->
    <schema name="lunch" checkSQLschema="false" sqlMaxLimit="100">
        <table name="lunchmenu" dataNode="dn1"  />
        <table name="restaurant" dataNode="dn1"  />
        <table name="userlunch" dataNode="dn1"  />
        <table name="users" dataNode="dn1"  />
        <table name="dictionary" primaryKey="id" autoIncrement="true" dataNode="dn1,dn2"  rule="mod-long" />

        
    </schema>

<!-- 分片配置 -->
    <dataNode name="dn1" dataHost="test1" database="lunch" />
    <dataNode name="dn2" dataHost="test2" database="lunch" />

<!-- 物理数据库配置 -->
    <dataHost name="test1" maxCon="1000" minCon="10" balance="0"  writeType="0" dbType="mysql" dbDriver="native">
        <heartbeat>select user();</heartbeat>
        <writeHost host="hostM1" url="192.168.0.2:3306" user="root" password="123456">  
        </writeHost>
    </dataHost>

    <dataHost name="test2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
        <heartbeat>select user();</heartbeat>
        <writeHost host="hostS1" url="192.168.0.3:3306" user="root" password="123456">  
        </writeHost>
    </dataHost>

</mycat:schema>

 

参数说明
schema数据库设置,此数据库为逻辑数据库,name与server.xml中schema对应
dataNode分片信息,也就是分库相关配置
dataHost物理数据库,真正存储数据的数据库

每个节点的属性逐一说明:

schema:

属性说明
name逻辑数据库名,与server.xml中的schema对应
checkSQLschema数据库前缀相关设置,建议看文档,这里暂时设为false
sqlMaxLimitselect 时默认的limit,避免查询全表

table:

属性说明
name表名,物理数据库中表名
dataNode表存储到哪些节点,多个节点用逗号分隔。节点为下文dataNode设置的name
primaryKey主键字段名,自动生成主键时需要设置
autoIncrement是否自增
rule分片规则名,具体规则下文rule详细介绍

dataNode

属性说明
name节点名,与table中dataNode对应
datahost物理数据库名,与datahost中name对应
database物理数据库中数据库名

dataHost

属性说明
name物理数据库名,与dataNode中dataHost对应
balance均衡负载的方式
writeType写入方式
dbType数据库类型
heartbeat心跳检测语句,注意语句结尾的分号要加。

小结

 小编建议,理论不能脱离实践,要去切身的体验不断地提高才可!

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值