Mycat分佈式數據庫架構解決方案--schema.xml詳解

echo編輯整理,歡迎轉載,轉載請聲明文章來源。歡迎添加echo微信(微信號:t2421499075)交流學習。 百戰不敗,依不自稱常勝,百敗不頹,依能奮力前行。——這纔是真正的堪稱強大!!!java


該文件是一個包含Mycat的系統配置信息文件,對應的原碼是SystemConfig.java。咱們對該文件作一個詳解,該文件在咱們安裝包中,/mycat/conf中(該文是基於「Mycat分佈式數據庫架構解決方案--Linux安裝運行Mycat」)的後續,能夠了解安裝以後目錄結構。想要對比詳細配置文件也能夠直接去github下載mycat源碼,下載地址: https://github.com/MyCATApach...
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

    <!-- schema標籤主要用於定義Mycat實例中的邏輯庫。Mycat能夠有多個邏輯庫,每一個邏輯庫都有本身相關的配置 -->
    <!-- 可使用schema標籤來劃分不一樣的邏輯庫,若是不配置schema標籤,則全部的表配置都會屬於同一個默認的邏輯庫 -->
    <!-- name="TESTDB" 給Mycat定義邏輯庫名稱 -->
    <!-- checkSQLschema屬性值爲true的時候,若是咱們執行語句select * from TESTDB.table;該設置會講TESTDB截取掉,SQL變成select * from table;該規則只能截掉schema上指定的庫 -->
    <!-- sqlMaxLimit屬性設置爲100時,每次執行的SQL語句若是沒有加上limit語句,Mycat會自動加上limit 100;不設置就會返回查詢到的全部信息 -->
    <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
        <!-- table標籤訂義了Mycat中的邏輯表,全部須要拆分的表都須要在table標籤中定義。-->
        <!-- name屬性定義邏輯表的名稱,同一個schema標籤中定義的table名字必須惟一 -->
        <!-- dataNode屬性該屬性的值須要與下面dataNode標籤中的name屬性的值相互對應。若是有多個值,使用','分隔 -->
        <!-- rule屬性用於指定邏輯表要使用的規則,規則的名字定義在rule.xml中定義,必須與tableRule標籤中name屬性一致 -->
        <!-- ruleRequired屬性用於指定表是否綁定分片規則,若是配置true,但沒有配置具體的rule,程序會報錯。-->
        <!-- primaryKey屬性對應真實表的主鍵 -->
        <!-- type屬性定義了邏輯表的類型,目前邏輯表只有全局表和普通表兩種類型。全局表對應的配置值:global,不指定普通表 -->
        <!-- autoIncrement屬性默認false,設置成爲true時Mycat對錶使用自增加主鍵 -->
        <!-- subTables屬性目前Mycat在1.6版本之後纔開始支持分表,而且dataNode在分表條件下只能配置一個,不支持各類條件的join關聯查詢語句 -->
        <!-- needAddLimit指定表是否須要自動在每一個語句後面加上limit限制。若是設置爲true,Mycat查詢的時候自動給咱們加上limit 100 -->
        <table name="travelrecord" needAddLimit="true" ruleRequired="true" autoIncrement="false" primaryKey="" dataNode="dn1,dn2,dn3" rule="auto-sharding-long"/>
    </schema>
    <!-- 一個schema表明一個邏輯庫 -->
    <schema name="TEST" checkSQLschema="true" sqlMaxLimit="100">
        <table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long"/>
    </schema>
    <!-- dataNode屬性用於綁定邏輯庫和具體的數據庫。Mycat1.3若是配置了dataNode,則不能夠配置分片表;
    Mycat的1.4和1.5版本能夠配置默認分片,配置須要分片的表便可 -->
    <!-- name屬性對應上面schema中間的DataNode的名字 -->
    <!-- database屬性是指定真是數據庫的名稱 -->
    <!-- dataHost屬性是對應數據庫的Mycat邏輯庫名稱 -->
    <dataNode name="dn1" dataHost="Node1" database="db1"/>
    <dataNode name="dn2" dataHost="Node2" database="db2"/>
    <dataNode name="dn3" dataHost="Node3" database="db3"/>

    <!-- 它是schema.xml中最後一個標籤,該標籤在Mycat邏輯庫中做爲底層標籤存在,直接定義了具體的數據庫實例、讀寫分離和心跳語句。-->
    <!-- name屬性是惟一標識dataHost標籤,供上層標籤使用 -->
    <!-- maxCon屬性指定每一個讀寫實例鏈接池的最大鏈接數。內嵌標籤writeHost/readHost都會使用這個屬性的值類實例化鏈接池的最大鏈接數 -->
    <!-- minCon屬性指定每一個讀寫實例鏈接池的最小鏈接數,初始化鏈接池的大小 -->
    <!-- balance屬性屬於負載均衡類型,目前有一下4中值
        balance="0" 不開啓讀寫分離機制,全部的操做都發送到當前能夠用的writeHost上。
        balance="1" 所有的readHost與stand by writeHost都參與select語句的負載均衡。
        balance="2" 全部的讀操做都隨機地在writeHost、readHost上分發。
        balance="3" 全部的讀請求都隨機分發到writeHost對應的readHost上執行,writeHost不負擔讀壓力-->
    <!-- writeType屬性有兩種值 writeType="0" 全部的寫操做都發送到配置的第1個writeHost上,writeHost1掛了則切到writeHost2上
         writeType="1" 全部的寫操做都隨機的發送到配置的writeHost上 -->
    <!-- dbType屬性指定後端鏈接的數據庫類型,目前除了支持二進制的MySQL協議,還支持使用JDBC鏈接的數據庫,例如MongoDB.Oracle等 -->
    <!-- daDriver指定鏈接後端數據庫使用的Driver,目前可選的有native和JDBC -->
    <!-- switchType屬性
            switchType="-1"表示不自動切換。
            switchType="1"爲默認值,表示自動切換。
            switchType="2"表示基於MySQL主從同步的狀態決定是否切換。
            switchType="3"表示基於MySQL Galary Cluster的切換機制。-->
    <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0"
              dbType="mysql" tempReadHostAvailable="" dbDriver="native" switchType="1" slaveThreshold="100">
        <!-- heartbeat標籤指明瞭用於後端數據庫進行心跳檢查的語句,MySQL使用select user() Oracle使用select 1 from dual-->
        <heartbeat>select user()</heartbeat>
        <!-- writeHost標籤和readHost標籤同樣,都指定Mycat後端數據庫的相關配置,用於實例化後端鏈接池。惟一的不一樣是,writeHost指定寫實例,readHost指定讀實例 -->
        <!-- host屬性用於表示不一樣的實例,對於writeHost咱們通常使用*M1;對於readHost,咱們通常使用*S1。 -->
        <!-- url屬性,鏈接後端實例的鏈接地址 -->
        <!-- user屬性,後端存儲實例的用戶名 -->
        <!-- password屬性,後端存儲實例的密碼 -->
        <!-- weight屬性在readHost中做爲讀節點的權重 -->
        <!-- usingDecrypt屬性同server.mxl中的usingDecrypt的配置 -->
        <writeHost host="hostM1" url="192.168.222.132:3306" user="root" password="123456"></writeHost>
    </dataHost>
</mycat:schema>

作一個有底線的博客主mysql

相關文章
相關標籤/搜索