MyCat 使用入门

下载代码

https://github.com/MyCATApache/Mycat-Server

开发环境

使用 IDEA 作为开发工具(必须是 2018 版本以上,否则 debug 和 run 按钮点击都无用)
安装 jdk 8
安装 mysql

Demo

在 mysql 中建分库

create database mycat_demo_01;
create database mycat_demo_02;

建表

use mycat_demo_01;
create table test(id int, value int);
use mycat_demo_02;
create table test(id int, value int);

​​​添加 MycatStartupTest 作为启动项

添加规则,主要包括:
server.xml: mycat 作为服务器面向用户的配置
schema.xml: 库/表拆分信息
rule.xml: 拆分算法
autoparition-long.txt: 拆分算法 auto-sharding-long 的配置文件

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="nonePasswordLogin">0</property> <!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
    <property name="useHandshakeV10">1</property>
    <property name="useSqlStat">0</property>  <!-- 1为开启实时统计、0为关闭 -->
    <property name="useGlobleTableCheck">0</property>  <!-- 1为开启全加班一致性检测、0为关闭 -->
    <property name="sequnceHandlerType">2</property>
    <property name="processorBufferPoolType">0</property>
    <property name="handleDistributedTransactions">0</property>
    <property name="useOffHeapForMerge">1</property>
    <property name="memoryPageSize">64k</property>
    <property name="spillsFileBufferSize">1k</property>
    <property name="useStreamOutput">0</property>
    <property name="systemReserveMemorySize">384m</property>
    <property name="useZKSwitch">false</property>
  </system>

  <user name="root" defaultAccount="true">
    <property name="password">123456</property>
    <property name="schemas">mycat_demo</property>
  </user>

</mycat:server>

schema.xml

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

    <schema name="mycat_demo" checkSQLschema="true" sqlMaxLimit="100">
        <!-- test 表的拆分设置,分布在哪些分片(dataNode) 及 拆分算法(rule) -->
        <table name="test" dataNode="dataNode_01,dataNode_02" rule="auto-sharding-long"/>
    </schema>

    <!-- 分片配置,本例中两个分片处于同一台物理 mysql -->
    <dataNode name="dataNode_01" dataHost="dataHost_01" database="mycat_demo_01" />
    <dataNode name="dataNode_02" dataHost="dataHost_01" database="mycat_demo_02" />

    <!-- 物理 mysql 设置,主要为连接信息 -->
    <dataHost name="dataHost_01" maxCon="1000" minCon="10" balance="0"
              writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
        <heartbeat>select user()</heartbeat>
        <writeHost host="host_01" url="127.0.0.1:3306" user="root" password="XXXXXX"> <!-- ‼️‼️‼️ url、user、password 设置成你的数据库 -->
        </writeHost>
    </dataHost>

</mycat:schema>

rule.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
  <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>
</mycat:rule>

autopartition-long.txt

# range start-end ,data node index
# 字段值处于 0-2000000 之间时,数据被路由到 dataNode1
# 字段值处于 2000001-4000000 之间时,数据被路由到 dataNode2
# 其他的路由到默认dataNode,即 dataNode1
0-200M=0
200M1-400M=1

测试

mysql -h127.0.0.1 -uroot -P8066 -p123456

insert into test(id, value) values(2000001,0);
insert into test(id, value) values(1,0);

分别查看 mycat_demo_01 和 mycat_demo_02 两库。可见数据被插入到了正确分片。

发布了34 篇原创文章 · 获赞 0 · 访问量 1391

猜你喜欢

转载自blog.csdn.net/justsomebody126/article/details/103528942