Mycat使用笔记

2019-10-17  本文已影响0人  Captain_tu
项目中的表数据量过千万,考虑分库分表,这里是调研mycat的笔记

安装

  1. 依赖
    • jdk
      安装java环境
    • mysql
      mysql5.6
    • 系统
      centos7
  2. 安装
    • 下载
      官网下载,解压到mycat目录

    • 配置server.xml
      config/server.xml中配置root用户和user用户的密码及数据库schema

    • 配置schema.xml
      config/schema.xml中配置

      <schema name="mycat" checkSQLschema="true" sqlMaxLimit="100">
                <!-- auto sharding by id (long) -->
                <table name="user" dataNode="dn1,dn2" primaryKey="id" autoIncrement="true" rule="auto-sharding-long" />
                <!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="lamycat-month-calldate"
                        /> -->
        </schema>
      

      上边这段配置表user分两个node存储,使用的规则是auto-sharding-long,且使用的id自增

      <!-- 分片配置 -->
        <dataNode name="dn1" dataHost="mycat1" database="mycat" />
        <dataNode name="dn2" dataHost="mycat2" database="mycat" />
      
        <!-- 物理数据库配置 -->
        <dataHost name="mycat1" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostM1" url="172.16.194.132:3306" user="root"
                                   password="abc123">
                </writeHost>
                <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
        </dataHost>
        <dataHost name="mycat2" maxCon="1000" minCon="10" balance="0"
                          writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <!-- can have multi write hosts -->
                <writeHost host="hostS1" url="172.16.194.1:3306" user="root"
                                   password="abc123">
                </writeHost>
                <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
        </dataHost>
      

      这一段配置两个分片的连接信息,每一个分片包含一个dataNode配置和一个dataHost配置,dataHost配置分片的连接信息

    • 配置分片规则

      <tableRule name="auto-sharding-long">
                <rule>
                        <columns>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>
      

      config/rule.xml中看到,'auto-sharding-long'根据id分片,使用的算法是'rang-long'
      同样在config/rule.xml中,看到'rang-long'在'autopartition-long.txt'配置规则

      # range start-end ,data node index
      # K=1000,M=10000.
      0-1K=0
      1K-100K=1
      

      上边配置的规则为,id小于等于1000的存入第一个node分片,id大于1000,小于等于100000的,存入第二个node分片(分片在之前的schema.xml中配置)

启动

  1. 启动
    执行命令bin/mycat即可启动mycat,在log中监控是否成功启动
  2. 问题
    • 内存问题
    # There is insufficient memory for the Java Runtime Environment to continue.
    # Native memory allocation (mmap) failed to map 357892096 bytes for committing reserved memory.
    
    free -h查看发现机器内存不足,清理之后即可成功启动。
    • 插入时报错,无法自增id
      修改server.xml中,取消注释
      <property name="sequnceHandlerType">0</property>
      
      这个配置sequnceHandlerType=0表示,自增的id存储到本地文件中,另外可以配置到数据库(sequnceHandlerType=1)、本地时间戳方式(sequnceHandlerType=2),可以自行查找怎么配置
      sequence_conf.properties中,可以配置当前表自增id从多少开始,最高到多少,以及当前到多少
      USER.MAXID=20000
      USER.CURID=0
      USER.MINID=0
      
  3. mycat启动默认端口号为8066,只需要将项目连接信息,改为连接8066即可
上一篇下一篇

猜你喜欢

热点阅读