Schema.xml做爲Mycat中最重要的配置文件之一,管理着Mycat的邏輯庫、表、分片規則、DataNode以及DataSource。java
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"></schema>
Schema標籤用於定義Mycat實例中的邏輯庫,Mycat能夠有多個邏輯庫,每一個邏輯庫都有本身的相關配置。mysql
標籤相關屬性:sql
該屬性用天綁定邏輯庫到某個具體的database上,1.3版本若是配置了dataNode,則不能夠配置分片表,1.4能夠配置分片表信息。mongodb
1.3版本的配置以下:數據庫
<schema name="USERDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> <!—schema標籤上配置了dataNode,在1.3版本中,這裏面不能配置任何表--> </schema>
1.4及之後的配置以下:後端
<schema name="USERDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn2"> <!—配置須要分片的表--> <table name=「tuser」 dataNode=」dn1」/> </schema>
那麼如今tuser就綁定到dn1所配置的具體database上,能夠直接訪問這個database,沒有配置的表則會走默認節點dn2,這裏注意沒有配置在分片裏面的表工具查看沒法顯示,但能夠正常使用。緩存
當設置成true時,若是sql語句中的表前面加有數據庫名 如:select * from TESTDB.tuser,則Mycat會把sql語句中的數據庫名去掉修改爲:select * from tuser ,通常設置成false。 oracle
該值爲一整數,如:100,則當執行sql:select * from tuser時,和執行select * from tuser limit 100,若是sql語句中顯式指定limit大小,以顯示指定的大小爲準。注意,若是運行的schema爲非拆分庫的,該屬性不會生效。 負載均衡
<dataNode name="dn1" dataHost="lch3307" database="db1" ></dataNode>
dataNode標籤訂義了Mycat中的數據節點,也就是一般所說的數據分片,一個dataNode標籤就是一個獨立的數據分片。工具
dataNode標籤相關屬性:
定義數據節點的名字,這個名字須要惟一。
定義分片屬於哪一個數據庫實例(一個邏輯名稱)。
這個是數據庫中的真實數據庫名稱。
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1" url="192.192.16.34:3306" user="root" password="Falsesoul1207"> <readHost host="hostS2" url="192.192.16.31:3306" user="root" password="Falsesoul1207"/> </writeHost> </dataHost>
dataHost標籤的相關屬性:
惟一標識dataHost標籤,供上層的標籤使用。
每一個讀寫實例鏈接池的最大鏈接數,標籤內嵌套的writeHost、readHost標籤都會使用這個屬性值來實例化出鏈接池的最大鏈接數。
每一個讀寫實例鏈接池的最小鏈接,即初始化鏈接池的大小。
負載均衡類型,目前有如下幾種取值:
balance="0",不開啓讀寫分離機制,全部讀操做都會發送到當前可用的writeHost上。(針對如上配置,全部讀請求全落到了writeHost(34)上)
balance="1",所有的readHost與stand by writeHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,而且M1和M2互爲主備),正常狀況下,M2,S1,S2都參與select語句的負載均衡。(針對如上配置,全部讀請求全落到了readHost(31)上)
balance="2",全部讀操做都隨機的在writeHost、readHost上分發。(針對如上配置,全部讀請求所有落到writeHost(34)和readHost(31)上)
balance="3",全部讀請求隨機的分發到writeHost對應的readHost執行,writeHost不負擔讀壓力,注意balance=3只在1.4及之後的版本才生效。(針對如上配置,全部讀請求全落到了readHost(31)上)
負載均衡類型,目前的取值有幾種:
writeType="0",全部寫操做發送到配置的第一個writeHost,第一個掛了切到還生存的第二個writeHost,從新啓動後已切換後的爲準,切換記錄在配置文件中:dnindex.properties,dnindex.properties爲本地緩存相關配置,一般用於主從切換記錄,記錄當前所用的writeHost的index(第一個爲0,第二個爲1,依次類推),不能刪除和擅自修改。
writeType="1",全部寫操做都隨機的發送到配置的writeHost,1.5之後廢棄不推薦。
指定後端鏈接數據庫類型,目前支持二進制的mysql協議,還有其餘使用JDBC鏈接的數據庫,如:mongodb、oracle、spark等。
指定鏈接後端數據庫使用的Driver,目前可選的值有native和JDBC。使用native的話,由於這個值執行的是二進制的mysql協議,因此可使用mysql和maridb。其餘類型的數據庫則須要使用JDBC驅動來支持,使用JDBC的把對應驅動JAR包放到MYCAT\lib目錄下,並檢查驅動JAR包中包括以下目錄結構的文件:META-INF\services\java.sql.Driver。在這個文件內寫上具體的 Driver 類名,例如: com.mysql.jdbc.Driver。
-1 表示不自動切換
1 默認值,自動切換
2 基於Mysql主從同步的狀態決定不否切換
3 基於Mysql galary cluster的切換機制(適合集羣)
心跳語句爲 show status like 'wsrep%'
dataHost的子標籤以下:
這個標籤指明用於和後端數據庫進行心跳檢查的語句。
2.writeHost、readHost
這兩個標籤都指定後端數據庫的相關配置給mycat,用於實例化後端鏈接池。writeHost指定寫實例,readHost指定讀實例。在一個dataHost內能夠定義多個writeHost和readHost,可是,若是writeHost指定的後端數據庫宕機,那麼這個writeHost綁定的全部readHost都將不可用,因爲這個writeHost宕機系統會自動檢測到,並切換到備用的writeHost上去。
用於標示不一樣實例,通常writeHost咱們使用*M1,readHost咱們用*S1。
後端數據庫鏈接地址。
後端數據庫的用戶名和密碼
權重,配置在readHost中做爲讀節點的權重(1.4之後版本支持)
是否對密碼加密,默認是0,否。