zoukankan      html  css  js  c++  java
  • mycat 单库分表

    上次把mycat的读写分离搞定了,这次试下单库分表,顾名思义就是在一个库里把一个表拆分为多个

    需要配置的配置文件为

    schema.xml

    配置内容如下

    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
            <schema name="app_house" checkSQLschema="false" sqlMaxLimit="100">
              <table name="t_order" primaryKey="id" autoIncrement="true" subTables="t_order$1-3" dataNode="dn1" rule="mod-long" /> 
            </schema>
            <dataNode name="dn1" dataHost="mycluster" database="testdb2" />
            <dataHost name="mycluster" maxCon="1000" minCon="10" balance="1"  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
              <heartbeat>select user()</heartbeat>
              <!-- can have multi write hosts -->
              <writeHost host="86_M" url="172.17.3.86:3306" user="root" password="123456">
                <!-- can have multi read hosts -->
              <readHost host="177_S" url="172.17.3.177:3306" user="root" password="123456" />
              </writeHost>
              <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
            </dataHost>
    </mycat:schema>

    上面主要的配置在于table 标签设置

    我们测试的单库分表要分的表为t_order,分表规则为mod-long,分布在一个数据库内的三个表上 t_order$1-3 等价于 t_order1,t_order2,t_order3

    需要注意的rule.xml里的mod-long规则设置

    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
                    <!-- how many data nodes -->
                    <property name="count">3</property>
            </function>

    count数目代表你要分几个表,3就是三个表,和schema.xml的数量一致,后端数据库为testdb2

    其余的配置就和读写分离一样就行

    然后启动mycat

    我们要在testdb2数据库里新建三个表,t_order1,t_order2,t_order3

    CREATE TABLE `t_order1` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      `t_user_id` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
    CREATE TABLE `t_order2` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      `t_user_id` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;
    CREATE TABLE `t_order3` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `name` varchar(255) NOT NULL,
      `t_user_id` int(11) NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=10 DEFAULT CHARSET=utf8;

    可以看到已经有三个表了

    我们开始插入数据测试,看看数据是否是插入到三个表里了

    INSERT INTO t_order(id,name,t_user_id) VALUES(1,'dd1',1);

    使用以上语句测试

    语句执行成功了

    去物理机实际数据库的表里看看

    可以看到很均匀的插入到三个分表里了

    至此单库分表测试完成。

  • 相关阅读:
    C字符串格式化
    oms登录bug
    宏旺文章审核功能使用指引
    phpcms文章审核
    html5的pushState 无刷新, 前进后退等
    js路由—backbone的路由的实现02
    js路由—backbone的路由的实现01
    js路由—简单路由的实现
    img标签和css的background-image的区别
    querySelector与querySelectorAll
  • 原文地址:https://www.cnblogs.com/hh2737/p/9140201.html
Copyright © 2011-2022 走看看