<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Licensed under the Apache License, Version 2.0 (the "License");
- you may not use this file except in compliance with the License. - You
may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0
- - Unless required by applicable law or agreed to in writing, software -
distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the
License for the specific language governing permissions and - limitations
under the License. -->
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<property name="nonePasswordLogin">0</property> <!-- 0爲須要密碼登錄、1爲不須要密碼登錄 ,默認爲0,設置爲1則須要指定默認帳戶-->
<property name="useHandshakeV10">1</property>
<property name="useSqlStat">0</property> <!-- 1爲開啓實時統計、0爲關閉 -->
<property name="useGlobleTableCheck">0</property> <!-- 1爲開啓全加班一致性檢測、0爲關閉 -->
<property name="sequnceHandlerType">2</property>
<!--<property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>-->
<!--必須帶有MYCATSEQ_或者 mycatseq_進入序列匹配流程 注意MYCATSEQ_有空格的狀況-->
<property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
<property name="subqueryRelationshipCheck">false</property> <!-- 子查詢中存在關聯查詢的狀況下,檢查關聯字段中是否有分片字段 .默認 false -->
<!-- <property name="useCompression">1</property>--> <!--1爲開啓mysql壓縮協議-->
<!-- <property name="fakeMySQLVersion">5.6.20</property>--> <!--設置模擬的MySQL版本號-->
<!-- <property name="processorBufferChunk">40960</property> -->
<!--
<property name="processors">1</property>
<property name="processorExecutor">32</property>
-->
<!--默認爲type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
<property name="processorBufferPoolType">0</property>
<!--默認是65535 64K 用於sql解析時最大文本長度 -->
<!--<property name="maxStringLiteralLength">65535</property>-->
<!--<property name="sequnceHandlerType">0</property>-->
<!--<property name="backSocketNoDelay">1</property>-->
<!--<property name="frontSocketNoDelay">1</property>-->
<!--<property name="processorExecutor">16</property>-->
<!--
<property name="serverPort">8066</property> <property name="managerPort">9066</property>
<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property>
<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
<!--分佈式事務開關,0爲不過濾分佈式事務,1爲過濾分佈式事務(若是分佈式事務內只涉及全局表,則不過濾),2爲不過濾分佈式事務,可是記錄分佈式事務日誌-->
<property name="handleDistributedTransactions">0</property>
<!--
off heap for merge/order/group/limit 1開啓 0關閉
-->
<property name="useOffHeapForMerge">0</property>
<!--
單位爲m
-->
<property name="memoryPageSize">64k</property>
<!--
單位爲k
-->
<property name="spillsFileBufferSize">1k</property>
<property name="useStreamOutput">0</property>
<!--
單位爲m
-->
<property name="systemReserveMemorySize">384m</property>
<!--是否採用zookeeper協調切換 -->
<property name="useZKSwitch">false</property>
<!-- XA Recovery Log日誌路徑 -->
<!--<property name="XARecoveryLogBaseDir">./</property>-->
<!-- XA Recovery Log日誌名稱 -->
<!--<property name="XARecoveryLogBaseName">tmlog</property>-->
<!--若是爲 true的話 嚴格遵照隔離級別,不會在僅僅只有select語句的時候在事務中切換鏈接-->
<property name="strictTxIsolation">false</property>
<property name="useZKSwitch">true</property>
</system>
<!--
從system標籤開始到結束中的內容配置了
鏈接 最大鏈接數 最小鏈接數 鏈接超時時間 隔離機制 事務切換....
至關於在mybatis中配置數據庫的最大最小鏈接數 鏈接超時時間
-->
<!-- 全局SQL防火牆設置 -->
<!--白名單可使用通配符%或着*-->
<!--例如<host host="127.0.0.*" user="root"/>-->
<!--例如<host host="127.0.*" user="root"/>-->
<!--例如<host host="127.*" user="root"/>-->
<!--例如<host host="1*7.*" user="root"/>-->
<!--這些配置狀況下對於127.0.0.1都能以root帳戶登陸-->
<!--
<firewall>
<whitehost>
<host host="1*7.0.0.*" user="root"/>
</whitehost>
<blacklist check="false">
</blacklist>
</firewall>
-->
<!--
整個user標籤中就是配置了mycat的帳號和密碼
name===》就是mycat的帳號
defaultAccount====》表示該帳號爲管理員帳號,並且只能出現一次
property:屬性標籤
password===》就是name的密碼
不管是帳號仍是密碼均可以隨意定製,開心就好!!!
readOnly:只讀(該帳號只能查詢數據,不能寫入數據)
schemas:指向的是mycat的數據庫(mycat的虛擬庫!!!這個庫並非真實存在的,是須要經過mysql的數據庫進行映射的),一個mycat中能夠有多個schema
隱藏mysql的真實庫的名字
鏈接mysql:
jdbc:mysql:localhost:3306/數據庫名
鏈接mycat:
jdbc:mysql:ip地址:端口號/mycat的虛擬庫名
schemas中的配置和mysql的數據庫能夠同樣,也能夠不同
-->
<user name="root" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">mysql01</property>
</user>
</mycat:server>
<?xml version="1.0" encoding="UTF-8"?> <!-- - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. --> <!DOCTYPE mycat:rule SYSTEM "rule.dtd"> <mycat:rule xmlns:mycat="http://io.mycat/"> <!-- 全部的規則配置一個tableRule對應一個function,若是須要進行配置必需要配置一對,不能單獨配置一個(若是單獨配置了一個的狀況下,mycat啓動的時候會直接報錯) 一共有十種規則: homework1: 百度把這10種規則所有弄明白,而後整理一份用本身語言描述的電子文檔 mod-long:(輪詢) mysql01 mysql數據庫 teach student mysql02 mysql數據庫 teach student 當客戶端發送請求===插入數據===》mycat===請求mysql===》會把第一條數據插入進mysql01, 會把第二條數據插入進mysql02 依次循環 --> <tableRule name="mod-long"> <rule> <columns>id</columns> <algorithm>mod-long</algorithm> </rule> </tableRule> <function name="mod-long" class="io.mycat.route.function.PartitionByMod"> <!-- 表明了datanode的節點數量 若是隻有兩臺datanode就必需要寫2 --> <property name="count">2</property> </function> </mycat:rule>
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--
!!!schema標籤的name屬性值必需要和server.xml中的schames保持一致!!!
schema就相似於mysql的數據庫
checkSQLschema:檢查SQL語句是否錯誤(select * from user wher id = 1)
默認值爲false,不須要改成true,把對SQL語句的檢查交給mysql處理
sqlMaxLimit:最大執行SQL語句的數量
一次性能夠執行多少條SQL語句
在schame標籤中有table標籤,這個標籤就是定義了mycat中的表
相似於mysql數據庫中的表
和mysql中的表名能夠重複也能夠不一致
dataNode:數據節點
在HDFS中存放數據
在mycat中映射的就是真實mysql數據庫(能夠有多個,也能夠只有一個),名字能夠隨意起
今天的目標是實現分庫分表,須要用到兩臺mysql數據庫,因此只須要配置dn1和dn2
rule:配置規則
配置必定要和rule.xml中保持一致
-->
<schema name="mysql01" checkSQLschema="false" sqlMaxLimit="100">
<!-- auto sharding by id (long) -->
<table name="mycat_student" dataNode="dn1,dn2" rule="mod-long" />
</schema>
<!--
datanode標籤對應的是table標籤中的datanode屬性
也就是說datanode屬性值必需要和dataNode的標籤name屬性值保值一致
dn1:表明了mysql01服務器==》mysql數據庫
dn2:表明了mysql02服務器==》mysql數據庫
dataHost:纔是真正的配置了分庫分表和讀寫分離的核心配置
database:映射的是真實mysql的數據庫名
-->
<dataNode name="dn1" dataHost="localhost1" database="mysql01" />
<dataNode name="dn2" dataHost="localhost2" database="mysql01" />
<!--
dataHost標籤必需要和dataNode標籤中的dataHost屬性保持一致
若是dataHost屬性名重複了,映射的是同一個dataHost
每個dataHost標籤就是一個真實的mysql數據庫
maxCon:最大鏈接數
minCon:最小鏈接數
homework2:
把balance,writeType,switchType弄明白,而且用本身的語言描述每一個值表明什麼意思,記錄電子文檔
balance:負載均衡
writeType:寫入的類型(讀寫分離使用)
switchType:轉換的類型(讀寫分離所使用的數據)
dbType:數據庫的類型(在最先的版本mycat只支持mysql一種數據庫,後來發展支持不少種數據庫)
dbDriver:數據庫驅動(使用本地驅動,使用的是mycat所提供的驅動)
slaveThreshold:本身查!!!!
master:主節點
slave:從節點
threshold:入口
-->
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<!--
heartbeat:心跳
mycat一直在監視mysql的user表(心跳),若是一旦發現mysql的user再也不有心跳,就會認爲這一臺mysql處於宕機狀態,也就不會再向這一臺mysql進行作增刪改查的操做
-->
<heartbeat>select user()</heartbeat>
<!--
writeHost:標籤是該臺mysql數據庫爲讀和寫的數據庫
readHost:標籤是該臺mysql數據庫爲讀的數據庫
writeHost若是單獨存在,標識該臺mysql數據庫爲讀和寫的操做
若是一旦和readHost一塊兒使用,writeHost就只能作些的操做,全部的讀操做都使用readHost完成
readHost必需要配置在writeHost的內容,不容許單獨存在
host:屬性只是標識了該臺數據庫的操做的內容,能夠隨意定義
url:數據庫的url
jdbc:mysql://localhost:3306
!!!!!若是配置了兩個writeHost,那麼host的值就必須不能重複!!!!!
-->
<writeHost host="write01" url="192.168.114.138:3306" user="root"
password="123456" />
</dataHost>
<dataHost name="localhost2" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="write02" url="192.168.114.139:3306" user="root"
password="123456" />
</dataHost>
<!--
mycat中所映射的真實mysql的表必需要mycat所聲明的table的名字保持一致
也就是說mycat的表名必需要和mysql的表名如出一轍,不然映射不到
-->
</mycat:schema>