1. 程式人生 > >MyCat入門+JAVA程式連線

MyCat入門+JAVA程式連線

本文章主要對mycat的配置檔案註釋說明,詳細的安裝使用請戳這個地址:mycat安裝使用

  • 連線mycat時,將原先連線mysql的埠和資料庫改為mycat的埠8066,和mycat的邏輯資料庫TESTDB,使用者名稱和密碼為server.xml表裡設定的user。
jdbc.url=jdbc:mysql://127.0.0.1:8066/TESTDB?characterEncoding=utf-8
jdbc.driver=com.mysql.jdbc.Driver
jdbc.username=user
jdbc.password=user


  • server.xml:設定連線的使用者,例如連線mysql資料庫時所需的使用者名稱、密碼和連線哪個資料庫;通過該xml可以配置連線使用者的許可權。在實驗中,測試了user使用者,由於設定了只讀,所以在插入資料時拋了異常。
<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE mycat:server SYSTEM "server.dtd">  
<mycat:server xmlns:mycat="http://io.mycat/">  
        <system>  
                <property name="defaultSqlParser">druidparser</property>  
                <property name="mutiNodeLimitType">1</property>  
                <property name="serverPort">8066</property> #連線埠,替換連線mysql時的3306埠
                <property name="managerPort">9066</property>   
        </system>  
        <!-- 任意設定登陸 mycat 的使用者名稱,密碼,資料庫  -->  
        <user name="test"> 
                <property name="password">test</property>  
                <property name="schemas">TESTDB</property>  #該使用者能夠連線的邏輯資料庫
        </user>  

        <user name="user">  
                <property name="password">user</property>  
                <property name="schemas">TESTDB</property>  
                <property name="readOnly">true</property>  
        </user>  
        <!--   
        <quarantine>   
           <whitehost>  
              <host host="127.0.0.1" user="mycat"/>  
              <host host="127.0.0.2" user="mycat"/>  
           </whitehost>  
       <blacklist check="false"></blacklist>  
        </quarantine>  
        -->  
</mycat:server>  

  • schema.xml:設定TESTDB邏輯資料庫對應哪些表,哪些表在哪些節點,節點的地址,
    <?xml version="1.0"?>  
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">  
    <mycat:schema xmlns:mycat="http://io.mycat/">  
    
        <!-- 設定表的儲存方式.schema name="TESTDB" 與 server.xml中的 TESTDB 設定一致  -->  
        <!-- 設定這個TESTDB邏輯資料庫對應哪些表,item表的rule=role1是該表的分庫規則,在rule.xml裡設定了規則 -->
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">  
            <table name="users" primaryKey="id"  dataNode="node_db01" />  
            <table name="item" primaryKey="id" dataNode="node_db02,node_db03" rule="role1" />  
        </schema>  
    
        <!-- 設定dataNode 對應的資料庫,及 mycat 連線的地址dataHost -->  
        <dataNode name="node_db01" dataHost="dataHost01" database="db01" />  
        <dataNode name="node_db02" dataHost="dataHost01" database="db02" />  
        <dataNode name="node_db03" dataHost="dataHost01" database="db03" />  
    
        <!-- mycat 邏輯主機dataHost對應的物理主機.其中也設定對應的mysql登陸資訊 -->  
        <dataHost name="dataHost01" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">  
                <heartbeat>select user()</heartbeat>  
                <writeHost host="server1" url="127.0.0.1:3306" user="root" password="root"/>  
        </dataHost>  
    </mycat:schema>
  • rule.xml:該路由表表明採用mod2的方式進行路由。通過下面可知是對item表的id鍵進行取模分表的,取模分到db02和db03,而users表直接路由到db01中。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
    
    <tableRule name="role1"> #建立角色,用於給哪張表分配角色
        <rule>
            <columns>id</columns>#根據id進行分割
            <algorithm>mod-long</algorithm>
        </rule>
    </tableRule>
    #分庫規則,上面設定了id作為分割條件,條件為 id % 2
    <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
        <!-- how many data nodes -->
        <property name="count">2</property>
    </function>
</mycat:rule>