MyCat配置
1. server.xml配置
Server.xml保存了mycat需要的所有的系統配置信息,代碼映射為SystemConfig類。 標簽主要有三個:
system,user,firewarll
1.1 user標簽
1.1.1 property標簽
<user name="test"> <!--用戶名是test-->
<property name="password">password</property><!--密碼是password-->
<property name="schemas">TESTDB</property><!-- 使用的schema是TESTDB-->
| 示例 | 說明 |
|---|---|
|
|
用戶密碼是test |
|
|
可訪問的schema有db1,db2 |
|
|
是否只讀 |
|
|
連接上限,降級權值 |
|
|
是否對密碼加密默認 0 否 如需要開啟配置 1, |
1.1.2 privileges標簽
對用戶的 schema以及表進行精細化的DML權限控制。
<privileges check="false">
check表示是否開啟DML權限檢查。默認是關閉。
dml順序說明
iinsert,update,select,delete
<schema name="db1" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
db1的權限是update,select。
tb01的權限是啥都不能干。
tb02的權限是insert,update,select,delete。
其他表默認是udpate,select。
1.2 system標簽
這個標簽內嵌套的所有 property 標簽都與系統配置有關。
1.3 firewarll標簽
防火牆配置
<firewall>
<whitehost>
<host host="127.0.0.1" user="root"/>
<host host="127.0.0.2" user="root"/>
</whitehost>
<blacklist check="false">
</blacklist>
</firewall>
2. schema.xml配置
這個文件是MyCat最重要的配置文件,負責管理庫,表,分片規則,DataNode ,DataSource。
主要包含的標簽有:
schema,dataNode,dataHost
2.1 schema標簽
<schema name="db1" checkSQLschema="false" sqlMaxLimit="100"></schema>
schema 標簽用於定義 MyCat 實例中的邏輯庫,MyCat 可以有多個邏輯庫,每個邏輯庫都有自己的相關配置。可以使用 schema 標簽來划分這些不同的邏輯庫。
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100"></schema>
<schema name="USERDB" checkSQLschema="false" sqlMaxLimit="100"></schema>
<!--查詢這兩個不同的邏輯庫中表的時候需要切換到該邏輯庫下才可以查詢到所需要的表 -->
heckSQLschema:
這個屬性默認就是false,官方文檔的意思就是是否去掉表前面的數據庫的名稱,”select * from db1.testtable” ,設置為true就會去掉db1。但是如果db1的名稱不是schema的名稱,那么也不會被去掉,因此官方建議不要使用這種語法。同時默認設置為false。
sqlMaxLimit:
當該值設置為某個數值時。每條執行的 SQL 語句,如果沒有加上 limit 語句,MyCat 也會自動的加上所對應的值。例如設置值為 100,執行”select * from test_table”,則效果為“selelct * from test_table limit 100;”。如果運行的schema為非切分庫,該屬性不會生效
2.1.1 table標簽
<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" ></table>
Table 標簽定義了 MyCat 中的邏輯表,所有需要拆分的表都需要在這個標簽中定義。
table 標簽的相關屬性:
| 屬性 | 說明 |
|---|---|
| name | 該屬性定義邏輯表的表名 |
| dataNode | 該屬性定義這個邏輯表所屬的 dataNode, 該屬性的值需要和 dataNode 標簽中 name 屬性的值相互對應。 |
| rule | 該屬性用於指定邏輯表要使用的規則名字,規則名字在 rule.xml 中定義,必須與 tableRule 標簽中 name 屬性屬性值一一對應 |
| ruleRequired | 該屬性用於指定表是否綁定分片規則,如果配置為 true,但沒有配置具體 rule 的話 ,程序會報錯。 |
| primaryKey | 該邏輯表對應真實表的主鍵 |
| type | 該屬性定義了邏輯表的類型,目前邏輯表只有“全局表”和”普通表”兩種類型。全局表定義type=”global”,不定義的就是普通表。 |
| autoIncrement | 主鍵是否自增長。 |
| subTables | 分表,分表目前不支持Join。 |
| needAddLimit | 是否自動添加limit,默認是開啟狀態。 |
2.1.2 childTable標簽
<table name="customer" primaryKey="ID" dataNode="dn1,dn2" rule="sharding-by-intfile">
<childTable name="c_a" primaryKey="ID" joinKey="customer_id" parentKey="id" />
</table>
childTable 標簽用於定義 E-R 分片的子表。通過標簽上的屬性與父表進行關聯。
屬性說明:
| 屬性 | 說明 |
|---|---|
| name | 子表的名稱 |
| joinKey | 子表中字段的名稱 |
| parentKey | 父表中字段名稱 |
| primaryKey | 該邏輯表對應真實表的主鍵 |
| needAddLimit | 是否自動添加limit,默認是開啟狀態。 |
2.2 dataNode標簽
dataNode 標簽定義了 MyCat 中的數據節點,也就是我們通常說所的數據分片。一個 dataNode 標簽就是一個獨立的數據分片。
<dataNode name="dNode1" dataHost="dHost128" database="db1" ></dataNode>
示例中所表述的意思為:使用名字為 dHost128數據庫實例上的 db1 物理數據庫,這就組成一個數據分片,最后,我們使用名字 dNode1標識這個分片。
dataNode 標簽的相關屬性:
| 屬性 | 說明 |
|---|---|
| name | 定義數據節點的名字,這個名字需要是唯一的 |
| dataHost | 該屬性用於定義該分片屬於哪個數據庫實例 |
| database | 該屬性用於定義該分片屬性哪個具體數據庫實例上的具體庫 |
2.3 dataHost標簽
該標簽定義了具體的數據庫實例、讀寫分離配置和心跳語句。
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="localhost:3306" user="root" password="123456">
</writeHost>
</dataHost>
dataHost 標簽的相關屬性:
| 屬性 | 說明 |
|---|---|
| name | 唯一標識 dataHost 標簽,供上層的標簽使用 |
| maxCon | 指定每個讀寫實例連接池的最大連接。 |
| minCon | 指定每個讀寫實例連接池的最小連接,初始化連接池的大小。 |
| balance | 負載均衡類型,目前的取值有4 種: “0”, 不開啟讀寫分離機制,所有讀操作都發送到當前可用的 writeHost 上。 “1”,全部的 readHost 與 stand by writeHost 參與 select 語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,並且 M1 與 M2 互為主備),正常情況下,M2,S1,S2 都參與 select 語句的負載均衡。”2”,所有讀操作都隨機的在 writeHost、readhost 上分發。”3”,所有讀請求隨機的分發到 wiriterHost 對應的 readhost 執行,writerHost 不負擔讀壓writeType 1. writeType=”0”, 所有寫操作發送到配置的第一個 writeHost,第一個掛了切到還生存的第二個writeHost,重新啟動后已切換后的為准,切換記錄在配置文件中:dnindex.properties .2. writeType=”1”,所有寫操作都隨機的發送到配置的 writeHost,1.5 以后廢棄不推薦。默認0就好了! |
| dbType | 指定后端連接的數據庫類型,目前支持二進制的 mysql 協議,還有其他使用 JDBC 連接的數據庫。例如:mongodb、oracle、spark 等. |
| dbDriver | 指定連接后端數據庫使用的 Driver,目前可選的值有 native 和 JDBC。使用 native 的話,因為這個值執行的是二進制的 mysql 協議,所以可以使用 mysql 和 maridb。其他類型的數據庫則需要使用 JDBC 驅動來支持。 |
| switchType | “-1” 表示不自動切換; “1” 默認值,自動切換; “2” 基於 MySQL 主從同步的狀態決定是否切換心跳語句為 show slave status; “3” 基於 MySQL galary cluster 的切換機制(適合集群)(1.4.1)心跳語句為 show status like ‘wsrep%’. |
| tempReadHostAvailable | 如果配置了這個屬性 writeHost 下面的 readHost 仍舊可用,默認 0 可配置(0、1)。 |
2.3.1 heartbeat標簽
這個標簽內指明用於和后端數據庫進行心跳檢查的語句。
例如:MYSQL 可以使用 select user(),Oracle 可以使用 select 1 from dual 等。
2.3.2 writeHost 和readHost 標簽
這兩個標簽都指定后端數據庫的相關配置,用於實例化后端連接池。唯一不同的是,writeHost 指定寫實例、readHost 指定讀實例。
屬性說明:
| 屬性 | 說明 |
|---|---|
| host | 用於標識不同實例,一般 writeHost 我們使用M1,readHost 我們用S1。 |
| url | 后端實例連接地址。Native:地址:端口 JDBC:jdbc的url |
| password | 后端存儲實例需要的密碼 |
| user | 后端存儲實例需要的用戶名字 |
| weight | 權重 配置在 readhost 中作為讀節點的權重 |
| usingDecrypt | 是否對密碼加密,默認0 |
3. rule.xml配置
rule.xml 里面就定義了我們對表進行拆分所涉及到的規則定義。
<tableRule name="date">
<rule>
<columns>indate</columns>
<algorithm>sharding-by-date</algorithm>
</rule>
</tableRule>
<function name="sharding-by-date" class="io.mycat.route.function.PartitionByDate">
<property name="dateFormat">yyyy-MM-dd</property>
<property name="sBeginDate">2019-01-01</property>
<property name="sPartionDay">30</property>
</function>
3.1 tableRule標簽
屬性 name指定唯一的名字,用於標識不同的表規則。
內嵌的 rule 標簽則指定對物理表中的哪一列進行拆分和使用什么路由算法。
| 標簽 | 說明 |
|---|---|
| columns | 要拆分的列名稱 |
| algorithm | 使用function標簽中name屬性,連接表規則的路由算法 |
3.2 function標簽
name屬性:指定算法名字
class屬性:制定路由算法的類名
property標簽:具體算法所需要用到的一些屬性
