server.xml

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- - - Licensed under the Apache License, Version 2.0 (the "License");
  3. - you may not use this file except in compliance with the License. - You
  4. may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
  5. - - Unless required by applicable law or agreed to in writing, software -
  6. distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
  7. WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
  8. License for the specific language governing permissions and - limitations
  9. under the License. -->
  10. <!DOCTYPE mycat:server SYSTEM "server.dtd">
  11. <mycat:server xmlns:mycat="http://io.mycat/">
  12. <system>
  13. <property name="nonePasswordLogin">0</property> <!-- 0为需要密码登陆、1为不需要密码登陆 ,默认为0,设置为1则需要指定默认账户-->
  14. <property name="ignoreUnknownCommand">0</property><!-- 0遇上没有实现的报文(Unknown command:),就会报错、1为忽略该报文,返回ok报文。
  15. 在某些mysql客户端存在客户端已经登录的时候还会继续发送登录报文,mycat会报错,该设置可以绕过这个错误-->
  16. <property name="useHandshakeV10">1</property>
  17. <property name="removeGraveAccent">1</property>
  18. <property name="useSqlStat">0</property> <!-- 1为开启实时统计、0为关闭 -->
  19. <property name="useGlobleTableCheck">0</property> <!-- 1为开启全加班一致性检测、0为关闭 -->
  20. <property name="sqlExecuteTimeout">300</property> <!-- SQL 执行超时 单位:秒-->
  21. <property name="sequnceHandlerType">1</property>
  22. <!--<property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
  23. INSERT INTO `travelrecord` (`id`,user_id) VALUES ('next value for MYCATSEQ_GLOBAL',"xxx");
  24. -->
  25. <!--必须带有MYCATSEQ_或者 mycatseq_进入序列匹配流程 注意MYCATSEQ_有空格的情况-->
  26. <property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
  27. <property name="subqueryRelationshipCheck">false</property> <!-- 子查询中存在关联查询的情况下,检查关联字段中是否有分片字段 .默认 false -->
  28. <property name="sequenceHanlderClass">io.mycat.route.sequence.handler.HttpIncrSequenceHandler</property>
  29. <!-- <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
  30. <!-- <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号-->
  31. <!-- <property name="processorBufferChunk">40960</property> -->
  32. <!--
  33. <property name="processors">1</property>
  34. <property name="processorExecutor">32</property>
  35. -->
  36. <!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
  37. <property name="processorBufferPoolType">0</property>
  38. <!--默认是65535 64K 用于sql解析时最大文本长度 -->
  39. <!--<property name="maxStringLiteralLength">65535</property>-->
  40. <!--<property name="sequnceHandlerType">0</property>-->
  41. <!--<property name="backSocketNoDelay">1</property>-->
  42. <!--<property name="frontSocketNoDelay">1</property>-->
  43. <!--<property name="processorExecutor">16</property>-->
  44. <!--
  45. <property name="serverPort">8066</property> <property name="managerPort">9066</property>
  46. <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
  47. <property name="dataNodeIdleCheckPeriod">300000</property> 5 * 60 * 1000L; //连接空闲检查
  48. <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
  49. <!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
  50. <property name="handleDistributedTransactions">0</property>
  51. <!--
  52. off heap for merge/order/group/limit 1开启 0关闭
  53. -->
  54. <property name="useOffHeapForMerge">0</property>
  55. <!--
  56. 单位为m
  57. -->
  58. <property name="memoryPageSize">64k</property>
  59. <!--
  60. 单位为k
  61. -->
  62. <property name="spillsFileBufferSize">1k</property>
  63. <property name="useStreamOutput">0</property>
  64. <!--
  65. 单位为m
  66. -->
  67. <property name="systemReserveMemorySize">384m</property>
  68. <!--是否采用zookeeper协调切换 -->
  69. <property name="useZKSwitch">false</property>
  70. <!-- XA Recovery Log日志路径 -->
  71. <!--<property name="XARecoveryLogBaseDir">./</property>-->
  72. <!-- XA Recovery Log日志名称 -->
  73. <!--<property name="XARecoveryLogBaseName">tmlog</property>-->
  74. <!--如果为 true的话 严格遵守隔离级别,不会在仅仅只有select语句的时候在事务中切换连接-->
  75. <property name="strictTxIsolation">false</property>
  76. <property name="useZKSwitch">true</property>
  77. <!--如果为0的话,涉及多个DataNode的catlet任务不会跨线程执行-->
  78. <property name="parallExecute">0</property>
  79. </system>
  80. <!-- 全局SQL防火墙设置 -->
  81. <!--白名单可以使用通配符%或着*-->
  82. <!--例如<host host="127.0.0.*" user="root"/>-->
  83. <!--例如<host host="127.0.*" user="root"/>-->
  84. <!--例如<host host="127.*" user="root"/>-->
  85. <!--例如<host host="1*7.*" user="root"/>-->
  86. <!--这些配置情况下对于127.0.0.1都能以root账户登录-->
  87. <!--
  88. <firewall>
  89. <whitehost>
  90. <host host="1*7.0.0.*" user="root"/>
  91. </whitehost>
  92. <blacklist check="false">
  93. </blacklist>
  94. </firewall>
  95. -->
  96. <!-- 设置访问的用户名密码 -->
  97. <user name="root" defaultAccount="true">
  98. <property name="password">123456</property>
  99. <!-- 注意此处是之前设定的抽象数据库名称 -->
  100. <property name="schemas">TESTDB</property>
  101. </user>
  102. <user name="mycat">
  103. <property name="password">123456</property>
  104. <property name="schemas">MENDB</property>
  105. </user>
  106. <user name="user">
  107. <property name="password">user</property>
  108. <property name="schemas">TESTDB</property>
  109. <property name="readOnly">true</property>
  110. <property name="defaultSchema">TESTDB</property>
  111. </user>
  112. <!-- 设置访问的用户名密码 -->
  113. <user name="jtjt" defaultAccount="true">
  114. <property name="password">123456</property>
  115. <!-- 注意此处是之前设定的抽象数据库名称 -->
  116. <property name="schemas">JTDB</property>
  117. </user>
  118. </mycat:server>

schema.xml

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

    <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn1">
        <!-- user表对应dn1节点 -->
    <table name="user" dataNode="dn1" />
    <!-- blog表对应dn1/dn2/dn3节点,rule-blog表示对blog表的路由规则名称 -->
    <table name="blog" dataNode="dn1,dn2,dn3" rule="rule-blog" />
    </schema>

    <schema name="MENDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn4">
        <table name="student" primaryKey="ID" dataNode="dn4"/>
    </schema>


    <schema name="JTDB" checkSQLschema="true" sqlMaxLimit="100" dataNode="dn5">
        <table name="lg_user_info" primaryKey="ID" dataNode="dn5"/>
        <table name="lg_login_info" primaryKey="ID" dataNode="dn5"/>
        <table name="lg_user_account" primaryKey="ID" dataNode="dn5"/>
    </schema>

    <!-- 为实例下面的各个库设置节点 -->
  <dataNode name="dn1" dataHost="localhost1" database="db001" />
  <dataNode name="dn2" dataHost="localhost1" database="db002" />
  <dataNode name="dn3" dataHost="localhost1" database="db003" />
  <dataNode name="dn4" dataHost="localhost1" database="testdb" />
  <dataNode name="dn5" dataHost="localhost2" database="bmlg" />

  <!-- 配置真实数据库实例信息 -->
  <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <!-- 配置数据库url、用户名、密码 -->
    <writeHost host="server1" url="localhost:3306" user="root" password="123456" />
  </dataHost>

 <!-- 配置真实数据库实例信息 -->
  <dataHost name="localhost2" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <!-- 配置数据库url、用户名、密码 -->
    <writeHost host="server1" url="47.101.xx.xxx:3308" user="root" password="1234464" />
  </dataHost>
    <!--
        <dataHost name="sequoiadb1" maxCon="1000" minCon="1" balance="0" dbType="sequoiadb" dbDriver="jdbc">
        <heartbeat>         </heartbeat>
         <writeHost host="hostM1" url="sequoiadb://1426587161.dbaas.sequoialab.net:11920/SAMPLE" user="jifeng"     password="jifeng"></writeHost>
         </dataHost>

      <dataHost name="oracle1" maxCon="1000" minCon="1" balance="0" writeType="0"     dbType="oracle" dbDriver="jdbc"> <heartbeat>select 1 from dual</heartbeat>
        <connectionInitSql>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'</connectionInitSql>
        <writeHost host="hostM1" url="jdbc:oracle:thin:@127.0.0.1:1521:nange" user="base"     password="123456" > </writeHost> </dataHost>

        <dataHost name="jdbchost" maxCon="1000"     minCon="1" balance="0" writeType="0" dbType="mongodb" dbDriver="jdbc">
        <heartbeat>select     user()</heartbeat>
        <writeHost host="hostM" url="mongodb://192.168.0.99/test" user="admin" password="123456" ></writeHost> </dataHost>

        <dataHost name="sparksql" maxCon="1000" minCon="1" balance="0" dbType="spark" dbDriver="jdbc">
        <heartbeat> </heartbeat>
         <writeHost host="hostM1" url="jdbc:hive2://feng01:10000" user="jifeng"     password="jifeng"></writeHost> </dataHost> -->

    <!-- <dataHost name="jdbchost" maxCon="1000" minCon="10" balance="0" dbType="mysql"
        dbDriver="jdbc"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1"
        url="jdbc:mysql://localhost:3306" user="root" password="123456"> </writeHost>
        </dataHost> -->
</mycat:schema>

rule.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
    - you may not use this file except in compliance with the License. - You 
    may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
    - - Unless required by applicable law or agreed to in writing, software - 
    distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
    License for the specific language governing permissions and - limitations 
    under the License. -->
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
    <tableRule name="rule1">
        <rule>
            <columns>id</columns>
            <algorithm>func1</algorithm>
        </rule>
    </tableRule>

    <tableRule name="sharding-by-date">
        <rule>
            <columns>createTime</columns>
            <algorithm>partbyday</algorithm>
        </rule>
    </tableRule>

    <tableRule name="rule2">
        <rule>
            <columns>user_id</columns>
            <algorithm>func1</algorithm>
        </rule>
    </tableRule>

    <tableRule name="sharding-by-intfile">
        <rule>
            <columns>sharding_id</columns>
            <algorithm>hash-int</algorithm>
        </rule>
    </tableRule>
    <tableRule name="auto-sharding-long">
        <rule>
            <columns>id</columns>
            <algorithm>rang-long</algorithm>
        </rule>
    </tableRule>
    <tableRule name="mod-long">
        <rule>
            <columns>id</columns>
            <algorithm>mod-long</algorithm>
        </rule>
    </tableRule>
    <tableRule name="sharding-by-murmur">
        <rule>
            <columns>id</columns>
            <algorithm>murmur</algorithm>
        </rule>
    </tableRule>
    <tableRule name="crc32slot">
        <rule>
            <columns>id</columns>
            <algorithm>crc32slot</algorithm>
        </rule>
    </tableRule>
    <tableRule name="sharding-by-month">
        <rule>
            <columns>create_time</columns>
            <algorithm>partbymonth</algorithm>
        </rule>
    </tableRule>
    <tableRule name="latest-month-calldate">
        <rule>
            <columns>calldate</columns>
            <algorithm>latestMonth</algorithm>
        </rule>
    </tableRule>

    <tableRule name="auto-sharding-rang-mod">
        <rule>
            <columns>id</columns>
            <algorithm>rang-mod</algorithm>
        </rule>
    </tableRule>

    <tableRule name="jch">
        <rule>
            <columns>id</columns>
            <algorithm>jump-consistent-hash</algorithm>
        </rule>
    </tableRule>

     <!-- 指定要设置的规则 -->
  <tableRule name="rule-blog">
    <rule>
      <!-- 规则生效的列 -->
      <columns>id</columns>
      <!-- 对应的路由算法 -->
      <algorithm>rule-blog-algorithm</algorithm>
    </rule>
  </tableRule>


    <function name="murmur"
              class="io.mycat.route.function.PartitionByMurmurHash">
        <property name="seed">0</property><!-- 默认是0 -->
        <property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
        <property name="virtualBucketTimes">160</property><!-- 一个实际的数据库节点被映射为这么多虚拟节点,默认是160倍,也就是虚拟节点数是物理节点数的160倍 -->
        <!-- <property name="weightMapFile">weightMapFile</property> 节点的权重,没有指定权重的节点默认是1。以properties文件的格式填写,以从0开始到count-1的整数值也就是节点索引为key,以节点权重值为值。所有权重值必须是正整数,否则以1代替 -->
        <!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property>
            用于测试时观察各物理节点与虚拟节点的分布情况,如果指定了这个属性,会把虚拟节点的murmur hash值与物理节点的映射按行输出到这个文件,没有默认值,如果不指定,就不会输出任何东西 -->
    </function>

    <function name="crc32slot"
              class="io.mycat.route.function.PartitionByCRC32PreSlot">
        <property name="count">2</property><!-- 要分片的数据库节点数量,必须指定,否则没法分片 -->
    </function>
    <function name="hash-int"
              class="io.mycat.route.function.PartitionByFileMap">
        <property name="mapFile">partition-hash-int.txt</property>
    </function>
    <function name="rang-long"
              class="io.mycat.route.function.AutoPartitionByLong">
        <property name="mapFile">autopartition-long.txt</property>
    </function>
    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        <!-- how many data nodes -->
        <property name="count">3</property>
    </function>

    <function name="func1" class="io.mycat.route.function.PartitionByLong">
        <property name="partitionCount">8</property>
        <property name="partitionLength">128</property>
    </function>
    <function name="latestMonth"
              class="io.mycat.route.function.LatestMonthPartion">
        <property name="splitOneDay">24</property>
    </function>
    <function name="partbymonth"
              class="io.mycat.route.function.PartitionByMonth">
        <property name="dateFormat">yyyy-MM-dd</property>
        <property name="sBeginDate">2015-01-01</property>
    </function>


    <function name="partbyday"
              class="io.mycat.route.function.PartitionByDate">
        <property name="dateFormat">yyyy-MM-dd</property>
        <property name="sNaturalDay">0</property>
        <property name="sBeginDate">2014-01-01</property>
        <property name="sEndDate">2014-01-31</property>
        <property name="sPartionDay">10</property>
    </function>

    <function name="rang-mod" class="io.mycat.route.function.PartitionByRangeMod">
        <property name="mapFile">partition-range-mod.txt</property>
    </function>

    <function name="jump-consistent-hash" class="io.mycat.route.function.PartitionByJumpConsistentHash">
        <property name="totalBuckets">3</property>
    </function>

     <!-- 配置算法具体实现方式 -->
  <function name="rule-blog-algorithm" class="io.mycat.route.function.PartitionByMod">
    <property name="count">3</property>    <!-- 表示对id进行除3取模分表 -->
  </function>

</mycat:rule>