mycat主从分离,分库分表

一、mycat的主从分离

概述:Mycat的架构其实很好理解,Mycat是代理,Mycat后面就是物理数据库。和Web服务器的Nginx类似。对于使用者来说,访问的都是Mycat,不会接触到后端的数据库Mycat没有实现主从复制的功能,毕竟数据库本身自带的这个功能才是最高效稳定的。

通过配置以下三个文件,设定mycat配置:

文件说明
server.xmlMycat的配置文件,设置账号、参数等
schema.xmlMycat对应的物理数据库和数据库表的配置
rule.xmlMycat分片(分库分表)规则

 

1.配置server.xml

表示外界连接mycat的信息。连接的默认端口时8066,以下连接的信息时用户名:root,密码:l2532390K,      端口8066,

也可以设置相应的用户权限,可以建多用户。

<user name="root" defaultAccount="true">
        <property name="password">l2532390K</property>
        <property name="schemas">TESTDB</property>

</user>

2、配置schema.xml

配置实际数据库,这里只做读写的分库,但是要配合数据库自带的主从数据库写功能。读写分离原理:通过将写数据请求负载到不同的主数据库,不同主数据库之间要做主从复制功能,从数据库和主数据库也要做主从功能。通过将数据写入主数据库,后利用数据库自带主从读写功能,将数据写入不同的主数据库和从数据库,保证所有主数据库之间和所有分数据库数据一致。读数据是,通过将每次的请求均衡负载到分数据库进行读取数据。

这里也可以设置一个写数据库作为主数据库,多个读数据库做为从数据库,比较请求数据量远远大于写的数据量。

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

    <schema name="TESTDB" checkSQLschema="false">     

        <table name="company" primaryKey="id" type="global" dataNode="dn1,dn2" />
        <table name="goods" primaryKey="id" type="global" dataNode="dn1" />
    </schema>

注释:schema中可以整体数据库配置,也可以单独的表进行配置如:

    <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">  。

但官网给出的是,单独表进行配置。
    <dataNode name="dn1" dataHost="jtc" database="jtcone" />

    <dataNode name="dn2" dataHost="gzy" database="jtcone,jtctwo" />

注释:dn1分库种类在schema中使用。dataHost是下面实体数据库中配置分类,每个dataHost都可以配置自己的读写实体数据库。database是表示数据库中的具体数据库,有多个数据库使用逗号隔开。
<!-- 物理数据库配置 ,配置的是实际的数据库信息-->
    <dataHost name="jtc" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100" maxRetryCount="4">
        <heartbeat>select 1</heartbeat>
        <writeHost host="jtcone" url="26.79.20.213:3306:3306" user="jtcuser"  password="i63630390d">
            <readHost host="jtcone" url="126.79.20.213:3306" user="jtcuser" password="k63630390d" />
        </writeHost>

    </dataHost>

    <dataHost name="gzy" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100" maxRetryCount="4">
        <heartbeat>select 
1</heartbeat>      
        <writeHost host="jtcone" url="26.79.20.214:3306:3306" user="jtcuser"   password="i63630390d">
            <readHost host="jtcone" url="126.79.20.214:3306" user="jtcuser" password="k63630390d" />
        </writeHost>

    </dataHost>
</mycat:schema>

注释:balance="1"的话,表示读写分离。表示需要关联的数据库名称,name="TESTDB" 中TESTDB需要与server.xml中设置数据库名称相同。select 1保持心跳语句。对写数据库这块还需要进一步测试,很多同学数mycat没有实现主从数据库数据复制,所以还是要设置主从数据库进行数据库数据复制。

3、配置rule.xml

分片的规则,主要关注rule属性,rule属性的内容来源于rule.xml这个文件,Mycat支持10种分表分库的规则,基本能满足你所需要的要求,这个必须赞一个,其他数据库中间件好像都没有这么多。目前未做分片,暂时未用到。

注释:<property name="count">16</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->

当规则需要修改时,比如please make sure table datanode size = function partition size时,需要修改对于的规则autopartition-long.txt删除一个节点即可。当然规则可以根据自己的需要进行修改。

二、mycat的分库分表

分库:上面样例中已经做了数据的读写分库

分表:由于数据库之间读写信息具有一定延时,所有原则上不建议分表,容易造成数据丢失。

三、调试:

1、源码调试,在官网下载源码后,引进eclipse后,找到MycatStartup.java文件,左键-》Run As -》Java  Application运行即可。

2、源码调试好后,将rule.xml,server.xml,schame.xml存放到官方编译好的mycat工具包中,部署工具包即可。

3、在windows中如果出现闪退,直接运行startup_nowrap.bat,如果出现闪退,在cmd 命令行运行,查看出错原因。

四、java工程中数据库登录

应用工程中连接mycat中间级与直接连接mysql是一样的,如下:

jdbc:mysql://127.0.0.1:8066/TESTDB?useUnicode=true&characterEncoding=utf-8

userName=root
password=l2532390K

五、在linux下启动命令

到mycat/bin文件夹下:

./mycat start

注意事项:

1、Mycat主从分离只是在读的时候做了处理,写入数据的时候,只会写入到writehost,需要通过mysql的主从复制将数据复制到readhost,这个问题当时候我纠结了好久,数据写入writehost后,readhost一直没有数据,以为是自己配置的问题,后面才发现Mycat就没有实现主从复制的功能,毕竟数据库本身自带的这个功能才是最高效稳定的。以上是网络获取的经验,未经证实。参考了:https://www.cnblogs.com/chongaizhen/p/11083226.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kunzai6

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值