怎么進(jìn)行MyCat的設(shè)置
發(fā)表時(shí)間:2023-07-20 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]schema.xml 涵蓋了MyCat的邏輯庫(kù)、表、分片規(guī)則、分片節(jié)點(diǎn)及數(shù)據(jù)源。<?xml version="1.0"?><!DOCTYPE mycat:sch...
schema.xml 涵蓋了MyCat的邏輯庫(kù)、表、分片規(guī)則、分片節(jié)點(diǎn)及數(shù)據(jù)源。
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- schema 定義mycat中的邏輯庫(kù),可以有多個(gè)邏輯庫(kù),
1)dataNode屬性:綁定邏輯庫(kù)到具體的Database上面,
2)checkSQLschema:如果為true,則會(huì)替換掉schema,如果為false則不會(huì);
3)sqlMaxLimit:如果帶了該屬性,則每次執(zhí)行sql的時(shí)候如果sql沒(méi)有l(wèi)imit則會(huì)帶上這個(gè)limit,如果schema為非拆分庫(kù),則該屬性不會(huì)生效。-->
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<!-- table標(biāo)簽定義了MyCat中的邏輯表,所有拆分的表都需要在table標(biāo)簽中定義。 -->
<!-- 1)name屬性:定義邏輯表的名稱(chēng)-->
<!-- 2)dataNode屬性:定義邏輯表所屬的dataNode,如果需要引用多個(gè)dataNode,則可以用dataNode="dn$0-99" 來(lái)代表dn0到dn99的數(shù)據(jù)庫(kù)-->
<!-- 3)rule屬性:用來(lái)指定邏輯表使用的規(guī)則名字,規(guī)則名字在rule.xml中定義。-->
<!-- 4)ruleRequired屬性:該屬性用于指定表是否綁定分片規(guī)則,如果配置為true,但是沒(méi)有具體的分片規(guī)則,則會(huì)報(bào)錯(cuò)。-->
<!-- 5)type屬性:定義邏輯表的類(lèi)型,分為"全局表(global)"和"普通表"兩種類(lèi)型,不設(shè)置該值的時(shí)候未global的所有表。-->
<!-- 6)autoIncrement屬性:使用該值的時(shí)候需要定義auto_increment,使用的時(shí)候最好配合數(shù)據(jù)庫(kù)模式的全局序列。-->
<!-- 7)subTables屬性:dataNode在分表的條件下只能配置一個(gè),不支持各種條件的Join關(guān)聯(lián)查詢(xún)。-->
<!-- 8)primaryKey屬性:邏輯表對(duì)應(yīng)真實(shí)表的主鍵。-->
<!-- 9)needAddLimit屬性:指定表是否需要字段再每個(gè)語(yǔ)句的后面加上limit限制。-->
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />
<!-- global table is auto cloned to all defined data nodes ,so can join
with any table whose sharding node is in the same data node -->
<table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" />
<table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" />
<!-- random sharding using mod sharind rule -->
<table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3"
rule="mod-long" />
<!-- <table name="dual" primaryKey="ID" dataNode="dnx,dnoracle2" type="global"
needAddLimit="false"/> <table name="worker" primaryKey="ID" dataNode="jdbc_dn1,jdbc_dn2,jdbc_dn3"
rule="mod-long" /> -->
<table name="employee" primaryKey="ID" dataNode="dn1,dn2"
rule="sharding-by-intfile" />
<table name="customer" primaryKey="ID" dataNode="dn1,dn2"
rule="sharding-by-intfile">
<!--childTable標(biāo)簽用于定義E-R分片的子表,通過(guò)標(biāo)簽上的屬性與浮表進(jìn)行關(guān)聯(lián)-->
<!-- 1)name屬性:定義子表的名稱(chēng)-->
<!-- 2)joinKey屬性:插入子表時(shí),回使用這個(gè)值查找浮表存貯的數(shù)據(jù)節(jié)點(diǎn)-->
<!-- 3)parentKey屬性:與父表建立關(guān)聯(lián)關(guān)系的列名,程序首先獲取joinKey的值,然后通過(guò)parentKey屬性指定的列名產(chǎn)生查詢(xún)語(yǔ)句,通過(guò)執(zhí)行語(yǔ)句得知父表存儲(chǔ)在哪個(gè)分片上,從而確定子表存貯的位置。-->
<!-- 4)primaryKey:和table標(biāo)簽一樣-->
<!-- 5)needAddLimit:和table標(biāo)簽一樣-->
<childTable name="orders" primaryKey="ID" joinKey="customer_id"
parentKey="id">
<childTable name="order_items" joinKey="order_id"
parentKey="id" />
</childTable>
<childTable name="customer_addr" primaryKey="ID" joinKey="customer_id"
parentKey="id" />
</table>
<!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate"
/> -->
</schema>
<!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
/> -->
<!-- dataNode標(biāo)簽定義了mycat中的數(shù)據(jù)節(jié)點(diǎn),這也就是我們通常所說(shuō)的數(shù)據(jù)分片,一個(gè)單獨(dú)的dataNode就是一個(gè)獨(dú)立的數(shù)據(jù)分片-->
<!--1)name屬性:定義數(shù)據(jù)節(jié)點(diǎn)的唯一名字-->
<!--2)dataHost屬性:定義該分片所屬的數(shù)據(jù)庫(kù)實(shí)例,屬性引用自dataHost標(biāo)簽上定義的name屬性-->
<!--3)database屬性:定義該分片所屬的數(shù)據(jù)庫(kù)實(shí)例上的具體數(shù)據(jù)庫(kù)。-->
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
<dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
<dataNode name="jdbc_dn2" dataHost="jdbchost" database="db2" />
<dataNode name="jdbc_dn3" dataHost="jdbchost" database="db3" /> -->
<!-- 定義數(shù)據(jù)庫(kù)實(shí)例,讀寫(xiě)分離和心跳語(yǔ)句-->
<!--1)那么屬性:標(biāo)識(shí)唯一的dataHost,-->
<!-- 2)maxCon屬性:指定每個(gè)讀寫(xiě)實(shí)例連接池的最大連接數(shù)。內(nèi)嵌writeHost、readHost標(biāo)簽會(huì)使用這個(gè)屬性的值來(lái)實(shí)例化連接池的最大連接數(shù)-->
<!--3)minCon屬性:指定每個(gè)讀寫(xiě)實(shí)例連接池的最小連接數(shù)。初始化連接池的大小的屬性。-->
<!--4)balance屬性:負(fù)債均衡類(lèi)型,有四種-->
<!-- balance="0" : 不開(kāi)啟讀寫(xiě)分離機(jī)制,所有的讀操作都發(fā)送到當(dāng)前可以用的writeHost上-->
<!-- balance="1" : 全部的readHost與stand by writeHost(雙主從模式下的master) 都參與select語(yǔ)句的負(fù)債均衡-->
<!-- balance="2" : 所有的讀操作都隨機(jī)的往writeHost和readHost上分發(fā)-->
<!-- balance="3" : 所有的讀分發(fā)到readHost上,writeHost負(fù)責(zé)寫(xiě)-->
<!--5)writeType屬性:負(fù)載均衡目前的取值有兩種:-->
<!-- writeType="0":所有的寫(xiě)操作都發(fā)送到第一個(gè)writeHost,writeHost1掛了,則切換到writeHost2上,重新恢復(fù)writeHost1后,還是以writeHost2為準(zhǔn)-->
<!-- writeType="1":所有的寫(xiě)操作都隨機(jī)的發(fā)送到配置的writeHost上,1.5版本以后不推薦使用該值。-->
<!--6)dbType屬性:制定后端后端數(shù)據(jù)的類(lèi)型:mysql,oracle、mongoDB-->
<!--7)dbDriver屬性:制定后端數(shù)據(jù)庫(kù)使用的Driver.目前可選的值為native和JDBC。-->
<!--8)switchType屬性:默認(rèn)值為1,自動(dòng)切換。-->
<!-- -1表示不自動(dòng)切換-->
<!-- 2表示基于mysql主從同步的狀態(tài)決定是否切換。-->
<!-- 3表示基于mysql galaxy cluster 的切換機(jī)制-->
<!--9)tempReadHostAvailable屬性:如果配置了writeHost屬性,下面的readHost依舊可以使用,默認(rèn)為0-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!-- 用于后端數(shù)據(jù)庫(kù)心跳檢測(cè)的語(yǔ)句-->
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="localhost:3306" user="root"
password="123456">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.1.200:3306" user="root" password="xxx" />
</writeHost>
<writeHost host="hostS1" url="localhost:3316" user="root"
password="123456" />
<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
</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>
以上就是如何進(jìn)行MyCat的配置的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注php中文網(wǎng)其它相關(guān)文章!
學(xué)習(xí)教程快速掌握從入門(mén)到精通的SQL知識(shí)。