這篇文章主要為大家分享mycat的配置文件。文中還介紹了mycat常用的幾個分片算法的計算過程和使用方法,希望大家通過這篇文章能有所收獲。
10年積累的網(wǎng)站建設、成都網(wǎng)站設計經(jīng)驗,可以快速應對客戶對網(wǎng)站的新想法和需求。提供各種問題對應的解決方案。讓選擇我們的客戶得到更好、更有力的網(wǎng)絡服務。我雖然不認識你,你也不認識我。但先網(wǎng)站設計后付款的網(wǎng)站建設流程,更有平南免費網(wǎng)站建設讓你可以放心的選擇與我們合作。

由上圖可以看到 Mycat 的核心配置文件均采用xml格式,這幾個配置文件的用途如下:
server.xml:用于配置系統(tǒng)參數(shù)、用戶信息、訪問權限及SQL防火墻和SQL攔截功能等schema.xml:用于配置邏輯庫、邏輯表相關信息rule.xml:如果使用了水平切分,就需要使用該文件配置切分規(guī)則log4j2.xml:Mycat日志相關的配置,例如日志輸出格式、日志級別等應用連接Mycat服務時,Mycat首先會通過server.xml中的配置信息進行用戶認證。用戶通過驗證后,所看到的邏輯庫、邏輯表都是schema.xml中所配置的。當使用了水平切分時,Mycat會通過rule.xml里配置的規(guī)則來定位具體的物理數(shù)據(jù)庫位置,從而完成寫入/讀取數(shù)據(jù)。
system 標簽用于配置 Mycat 的系統(tǒng)參數(shù),其格式如下:
<system>
<!-- ${key}表示配置屬性的名稱,${value}表示該配置屬性的值 -->
<property name="${key}">${value}</property>
</system>配置 Mycat 服務端口示例:
<system>
<property name="serverPort">3306</property>
</system>常見的系統(tǒng)參數(shù)舉例:
<system>
<!-- mycat 服務連接端口 -->
<property name="serverPort">8066</property>
<!-- mycat 服務管理端口 -->
<property name="managerPort">9066</property>
<!-- mycat 服務監(jiān)聽的ip -->
<property name="bindIp">0.0.0.0</property>
<!-- 0為需要密碼登陸、1為不需要密碼登陸;默認為0,設置為1則需要指定默認賬戶-->
<property name="nonePasswordLogin">0</property>
<!-- 前端連接的寫隊列大小 -->
<property name="frontWriteQueueSize">2048</property>
<!-- 設置字符集編碼 -->
<property name="charset">utf8</property>
<!-- mycat 的進程數(shù)量 -->
<property name="processors">8</property>
<!-- 閑置連接超時時間,單位:毫秒 -->
<property name="idleTimeout">1800000</property>
<!-- 默認最大返回的數(shù)據(jù)集大小 -->
<property name="defaultMaxLimit">100</property>
<!-- 允許的最大包大小 -->
<property name="maxPacketSize">104857600</property>
<!-- 0遇上沒有實現(xiàn)的報文(Unknown command:),就會報錯、1為忽略該報文,返回ok報文。
在某些MySQL客戶端存在客戶端已經(jīng)登錄的時候還會繼續(xù)發(fā)送登錄報文,mycat會報錯,該設置可以繞過這個錯誤-->
<property name="ignoreUnknownCommand">0</property>
<property name="useHandshakeV10">1</property>
<property name="removeGraveAccent">1</property>
<!-- 1為開啟實時統(tǒng)計、0為關閉 -->
<property name="useSqlStat">0</property>
<!-- 1為開啟全加班一致性檢測、0為關閉 -->
<property name="useGlobleTableCheck">0</property>
<!-- SQL 執(zhí)行超時 單位:秒-->
<property name="sqlExecuteTimeout">300</property>
<property name="sequnceHandlerType">1</property>
<!--必須帶有MYCATSEQ_或者 mycatseq_進入序列匹配流程 注意MYCATSEQ_有空格的情況-->
<property name="sequnceHandlerPattern">(?:(\s*next\s+value\s+for\s*MYCATSEQ_(\w+))(,|\)|\s)*)+</property>
<!-- 子查詢中存在關聯(lián)查詢的情況下,檢查關聯(lián)字段中是否有分片字段 .默認 false -->
<property name="subqueryRelationshipCheck">false</property>
<property name="sequenceHanlderClass">io.mycat.route.sequence.handler.HttpIncrSequenceHandler</property>
<!--默認為type 0: DirectByteBufferPool | type 1 ByteBufferArena | type 2 NettyBufferPool -->
<property name="processorBufferPoolType">0</property>
<!--分布式事務開關,0為不過濾分布式事務,1為過濾分布式事務(如果分布式事務內(nèi)只涉及全局表,則不過濾),2為不過濾分布式事務,但是記錄分布式事務日志-->
<property name="handleDistributedTransactions">0</property>
<!-- off heap for merge/order/group/limit 1開啟;0關閉 -->
<property name="useOffHeapForMerge">0</property>
<!--是否采用zookeeper協(xié)調(diào)切換 -->
<property name="useZKSwitch">false</property>
<!--如果為 true的話 嚴格遵守隔離級別,不會在僅僅只有select語句的時候在事務中切換連接-->
<property name="strictTxIsolation">false</property>
<!-- Mycat連接數(shù)據(jù)庫時使用的隔離級別
1 - 讀未提交
2 - 讀已提交
3 - 可重復讀
4 - 串行化
-->
<property name="txIsolation">2</property>
<property name="useZKSwitch">true</property>
<!--如果為0的話,涉及多個DataNode的catlet任務不會跨線程執(zhí)行-->
<property name="parallExecute">0</property>
</system>user 標簽用于配置Mycat的訪問用戶及權限,其格式如下:
<user name=${username}>
<property name="${key}">${value}</property>
...
</user>配置示例:
<!-- 用戶名 -->
<user name="mall">
<!-- 密碼 -->
<property name="password">123456</property>
<!-- 允許該用戶訪問的邏輯庫 -->
<property name="schemas">mall_db</property>
<!-- 可配置多個允許訪問的邏輯庫,使用逗號分隔 -->
<!-- <property name="schemas">mall_db,db1,db2</property> -->
<!-- 是否只讀 -->
<property name="readOnly">false</property>
</user>除了配置對庫的權限可能還不夠,有時候我們需要配置用戶對某些表的訪問權限。如下示例:
<!-- 用戶名 -->
<user name="mall">
<!-- 密碼 -->
<property name="password">123456</property>
<!-- 允許該用戶訪問的邏輯庫 -->
<property name="schemas">mall_db,db1,db2</property>
<!-- 表級 DML 權限配置,check屬性表示是否開啟該配置 -->
<privileges check="true">
<!-- 特別權限應用的邏輯庫 -->
<schema name="mall_db" dml="0110">
<!--
配置用戶對該表的訪問權限,dml屬性用于指定權限位,
如果table標簽沒有配置該屬性的話,默認取schema標簽的dml屬性值,
剩余沒有配置的其他表默認也是取schema標簽的dml屬性值
-->
<table name="user_table" dml="0000"></table>
<table name="order_table" dml="1111"></table>
</schema>
</privileges>
</user>dml屬性配置的數(shù)字是權限位,分別對應著insert,update,select,delete四種權限。例如,當dml的值為0110時,表示擁有update和select權限,不具有insert和delete權限。所以權限位為1時代表擁有對應的操作權限,為0時代表沒有該操作權限。
在該示例中,mall用戶對:
user_table表不具有任何操作權限order_table表擁有所有操作權限update和select權限以上配置用戶的示例中,密碼都是以明文的形式寫在配置文件中。但用戶的密碼是安全敏感的,一般不會直接在配置文件中寫明文密碼,而是寫一個加密過后的密碼。否則只要擁有查看server.xml文件的權限,就能輕易獲取到各個用戶的密碼,這是非常不安全的。
因此,Mycat 提供了一個工具用于加密明文密碼,該工具在一個jar包內(nèi),可使用如下命令對密碼進行加密:
[root@txy-server /usr/local/mycat]# java -cp lib/Mycat-server-1.6.7.4-release.jar io.mycat.util.DecryptUtil 0:root:123456參數(shù)說明:
0:代表的是mycat用戶登錄密碼加密(1 則是dataHost加密)root:用戶名123456:明文密碼執(zhí)行成功后,會得到一個加密后的字符串:
GO0bnFVWrAuFgr1JMuMZkvfDNyTpoiGU7n/Wlsa151CirHQnANVk3NzE3FErx8v6pAcO0ctX3xFecmSr+976QA==復制該字符串,替換配置文件中的明文密碼,如下示例:
<user name="root" defaultAccount="true">
<!-- 需要聲明使用的是加密后的密碼 -->
<property name="usingDecrypt">1</property>
<property name="password">GO0bnFVWrAuFgr1JMuMZkvfDNyTpoiGU7n/Wlsa151CirHQnANVk3NzE3FErx8v6pAcO0ctX3xFecmSr+976QA==</property>
...
</user>我們都知道Mycat是使用Java進行開發(fā)的,所以其日志框架也是使用Java生態(tài)圈內(nèi)的log4j2。Mycat日志相關的配置都在 log4j2.xml 文件中,本小節(jié)將介紹一些常用的配置項。
Pattern 標簽用于配置 Mycat 日志輸出格式,默認如下:
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] (%l) - %m%n</Pattern>
</PatternLayout>%d{yyyy-MM-dd HH:mm:ss.SSS}:日志的時間格式%5p:輸出的日志的級別%t:輸出日志的線程名稱%l:日志輸出語句所在的代碼位置%m:輸出代碼中指定的日志內(nèi)容%n:輸出一個換行符更多Pattern取值詳見官方文檔
這里截取了一段 Mycat 的日志內(nèi)容,可以看到與Pattern是一一對應上的:
2020-01-09 15:22:57.960 INFO [Timer1] (io.mycat.backend.datasource.PhysicalDatasource.getConnection(PhysicalDatasource.java:564)) - no ilde connection in pool 1838161857 ,create new connection for hostM1 of schema db3 totalConnectionCount: 0 increamentCount: 1level 屬性用于配置 Mycat 的日志輸出級別,默認為info級別:
<asyncRoot level="info" includeLocation="true">關于log4j2的內(nèi)建日志級別詳見官方文檔
當我們需要通過Mycat實現(xiàn)數(shù)據(jù)分片時就得用到rule.xml配置文件,該文件用于配置:
這是一個分片規(guī)則的配置示例:
<!-- name屬性指定分片規(guī)則的名稱,必須在 rule.xml 文件中是唯一的 -->
<tableRule name="hash-mod-4_id">
<rule>
<!-- 指定使用表中的哪個列進行分片 -->
<columns>id</columns>
<!-- 指定表的分片算法,取值為<function>標簽的name屬性 -->
<algorithm>hash-mod-4</algorithm>
</rule>
</tableRule>{分片算法名稱}-{分片數(shù)量}_{分片列};上面的示例就是采用的這種命名格式上面示例中所提到的<function>標簽是用于配置表的分片算法或者說分片函數(shù),如下示例:
<!-- name屬性指定分片算法的名稱,同樣需要是唯一的;class屬性指定該算法的具體實現(xiàn)類 -->
<function name="hash-mod-4"
class="io.mycat.route.function.PartitionByHashMod">
<!-- 要分片的數(shù)據(jù)庫節(jié)點數(shù)量,必須指定,否則沒法分片 -->
<property name="count">4</property>
</function>每個分片算法的所需參數(shù)可能不一樣,所以property標簽是可以有多個的,其屬性也因具體的分片算法而異。如下示例:
<function name="partbyday"
class="io.mycat.route.function.PartitionByDate">
<property name="dateFormat">yyyy-MM-dd</property>
<property name="sNaturalDay">0</property>
<property name="sBeginDate">2014-01-01</property>
<property name="sEndDate">2014-01-31</property>
<property name="sPartionDay">10</property>
</function>Mycat 內(nèi)置了非常多的分片算法,并且我們也可以針對實際情況自行開發(fā)屬于自己的分片算法。我們來看看常用分片算法都有哪些:
PartitionByMod:簡單取模,直接通過列值進行取模得出分片位置PartitionByHashMod:哈希取模,先將列值進行hash運算之后再取模得出分片位置PartitionByFileMap:分片枚舉,根據(jù)枚舉值對數(shù)據(jù)進行分片,例如在異地多活的場景中通過地區(qū)id進行數(shù)據(jù)分片的場景PartitionByPrefixPattern:字符串范圍取模,根據(jù)長字符串的前面幾位進行取模分片簡單取模分片算法的工作原理:
配置示例:
<tableRule name="mod-long-2_id">
<rule>
<columns>id</columns>
<algorithm>mod-long</algorithm>
</rule>
</tableRule>
<function name="mod-long"
class="io.mycat.route.function.PartitionByMod">
<!-- 取模的基數(shù),也就是分片數(shù)量 -->
<property name="count">2</property>
</function>總結:
分片列 % 分片基數(shù)io.mycat.route.function.PartitionByMod當需要取模的列為非整型時,就可以使用哈希取模分片算法。其工作原理如下圖:
配置示例:
<tableRule name="hash-mod-2_login_name">
<rule>
<columns>login_name</columns>
<algorithm>hash-mod</algorithm>
</rule>
</tableRule>
<function name="hash-mod"
class="io.mycat.route.function.PartitionByHashMod">
<property name="count">2</property>
</function>總結:
hash(分片列) % 分片基數(shù)io.mycat.route.function.PartitionByHashMod前兩種分片算法都是通過算法本身去計算出分片位置,是無法人工控制的。如果需要人工控制分片位置時,就可以使用到分片枚舉算法。該算法使得我們可以指定一些枚舉值來對分片位置進行控制,其實也就相當于是人工指定了某些數(shù)據(jù)應該到哪個分片。
例如,某張表中有個存儲用戶所在區(qū)域id的列,我們希望將區(qū)域id與數(shù)據(jù)庫所在的區(qū)域進行映射,以實現(xiàn)區(qū)域id為1的數(shù)據(jù)被分片到區(qū)域1數(shù)據(jù)庫中,區(qū)域id為2的數(shù)據(jù)被分片到區(qū)域2數(shù)據(jù)庫中,以此類推。在這種場景下就可以使用分片枚舉算法,其工作原理如下圖:
mapFile配置一個分片關系映射,其格式為key-value,key為枚舉,value為數(shù)據(jù)節(jié)點的索引。圖中的枚舉就是area_id,一個area_id對應著一個數(shù)據(jù)節(jié)點。沒有配置映射關系的area_id則會被分片到DEFAULT_NODE所對應的數(shù)據(jù)節(jié)點。配置示例:
<tableRule name="hash-int_area_id">
<rule>
<columns>area_id</columns>
<algorithm>hash-int</algorithm>
</rule>
</tableRule>
<function name="hash-int"
class="io.mycat.route.function.PartitionByFileMap">
<!-- mapFile 文件名,位于config目錄下 -->
<property name="mapFile">partition-hash-int.txt</property>
<!-- 指定mapFile中枚舉的數(shù)據(jù)類型,0為整型;非0則為字符串類型 -->
<property name="type">0</property>
<!-- 是否啟用默認節(jié)點,大于等于0為啟用;小于等于0為不啟用 -->
<property name="defaultNode">0</property>
</function>mapFile時需要注意這一點總結:
$MYCAT_HOME/conf目錄下增加mapFile來配置枚舉值同節(jié)點的映射關系hash(分片列) % 分片基數(shù)io.mycat.route.function.PartitionByFileMap以上所介紹到的分片算法都是根據(jù)列進行分片的,在實際工作中我們可能會遇到這樣一個需求:需要通過字符串的前幾位或后幾位進行分片。例如,通過訂單號的前五位進行分片計算,或按用戶的姓氏進行分片。在這種場景下,就可以使用字符串范圍取模分片算法。
例如,需要對ABCDEFGHI這個字符串的前三位進行分片計算,其計算過程如下圖:
mapFile里配置的取值范圍與數(shù)據(jù)節(jié)點索引的映射關系得出分片的數(shù)據(jù)節(jié)點。因此,mapFile需要配置所有可能的取值范圍,否則找不到對應的數(shù)據(jù)節(jié)點就會報錯。工作原理:
配置示例:
<tableRule name="sharding-by-prefix-pattern_login_name">
<rule>
<columns>login_name</columns>
<algorithm>sharding-by-prefix-pattern</algorithm>
</rule>
</tableRule>
<function name="sharding-by-prefix-pattern"
class="io.mycat.route.function.PartitionByPrefixPattern">
<!-- mapFile 文件名,位于config目錄下 -->
<property name="mapFile">prefix-partition-pattern.txt</property>
<!-- 求模基數(shù) -->
<property name="patternValue">128</property>
<!-- 字符串范圍,這里為前兩位 -->
<property name="prefixLength">2</property>
</function>總結:
$MYCAT_HOME/conf目錄下增加mapFile來配置取模范圍同節(jié)點的映射關系io.mycat.route.function.PartitionByPrefixPattern用途:
schema 標簽用于定義邏輯庫,示例:
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
...
</schema>checkSQLschema屬性判斷是否檢查發(fā)給Mycat的SQL是否含有庫名,為true時會將SQL中的庫名刪除掉name屬性定義邏輯庫的名字,必須唯一不能重復sqlMaxLimit屬性用于限制返回結果集的行數(shù),值為-1時表示關閉該限制。如果沒有開啟限制則默認取server.xml里配置的限制randomDataNode屬性定義將一些隨機語句發(fā)送到該數(shù)據(jù)節(jié)點中使用了schema 標簽定義邏輯庫之后,還需要使用table 標簽定義邏輯表。示例:
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
<!-- 多表定義 -->
<table name="travelrecord,address" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" splitTableNames ="true"/>
<!-- 單表定義 -->
<table name="oc_call" primaryKey="id" dataNode="dn1$0-743" rule="latest-month-calldate"/>
</schema>name 屬性定義邏輯表的名字,必須唯一不能重復且需要與數(shù)據(jù)庫中的物理表名一致。使用逗號分割配置多個表,即多個表使用這個配置primaryKey 屬性指定邏輯表中的主鍵,也是需要與物理表的主鍵一致dataNode 屬性指定物理表所在數(shù)據(jù)節(jié)點的名稱,配置多個數(shù)據(jù)節(jié)點時需按索引順序并使用逗號分隔,或指定一個索引范圍:dn1$0-743。注意數(shù)據(jù)節(jié)點定義之后,順序不能再發(fā)生改變,否則會導致數(shù)據(jù)混亂rule 屬性用于指定分片規(guī)則名稱,對應rule.xml中的<tableRule>標簽的name屬性,如無需分片可以不指定splitTableNames 屬性定義是否允許多個表的定義dataNode 標簽用于定義數(shù)據(jù)節(jié)點,數(shù)據(jù)節(jié)點指向的是存儲邏輯表的物理數(shù)據(jù)庫。示例:
<dataNode name="dn1" dataHost="localhost1" database="db1" />
<dataNode name="dn2" dataHost="localhost1" database="db2" />
<dataNode name="dn3" dataHost="localhost1" database="db3" />
<!-- 可以配置一個范圍 -->
<dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"/>name 屬性定義數(shù)據(jù)節(jié)點的名稱,必須唯一dataHost 屬性指定分片所在的物理主機database 屬性指定物理數(shù)據(jù)庫的名稱dataHost 標簽用于定義后端物理數(shù)據(jù)庫主機信息,該標簽內(nèi)有兩個子標簽,可以定義一組數(shù)據(jù)庫主機信息。例如,定義一組主從集群結構的數(shù)據(jù)庫主機信息:
writeHost標簽配置寫實例,即主從中的master節(jié)點readHost 標簽配置讀實例,即主從中的salve節(jié)點readHost是writeHost的子標簽,與writeHost有綁定關系在一個dataHost內(nèi)可以定義多個writeHost和readHost。但是,如果writeHost指定的后端數(shù)據(jù)庫宕機,那么這個writeHost綁定的所有readHost都將不可用。另一方面,由于這個writeHost宕機系統(tǒng)會自動的檢測到,并切換到備用的writeHost上去。
配置示例:
<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="localhost" url="localhost:3306" user="root"
password="123456">
<readHost host="localhost" url="localhost:3306"
user="root" password="123456"></readHost>
</writeHost>
</dataHost>name 屬性用于定義主機名稱,必須唯一maxCon 屬性指定每個讀/寫實例連接池的最大連接數(shù)。也就是說,標簽內(nèi)嵌套的writeHost、readHost 標簽都會使用這個屬性的值來實例化出連接池的最大連接數(shù)minCon 屬性指定每個讀寫實例連接池的最小連接數(shù),即初始化連接池的大小dbType 屬性指定后端連接的數(shù)據(jù)庫類型,目前支持二進制的mysql協(xié)議,還有其他使用JDBC連接的數(shù)據(jù)庫dbDriver 屬性指定連接后端數(shù)據(jù)庫使用的驅動,目前可選的值有native和JDBCslaveThreshold 屬性用于定義主從復制延時閾值,當Seconds_Behind_Master > slaveThreshold時,讀寫分離篩選器會過濾掉此Slave機器,防止讀到很久之前的舊數(shù)據(jù)balance 屬性指定讀寫分離的負載均衡類型,目前的取值有4 種:0:不開啟讀寫分離機制,所有讀操作都發(fā)送到當前可用的 writeHost 上1:全部的readHost與stand by writeHost參與select語句的負載均衡2:所有讀操作都隨機在writeHost、readhost 上分發(fā)3:所有讀請求隨機分發(fā)到 wiriterHost 對應的readhost 執(zhí)行。即 writerHost 不負擔讀壓力,全部讀請求由 readhost 執(zhí)行。注意該取值只在1.4及其以后版本有,1.3沒有writeType 屬性指定寫實例的負載均衡類型,目前的取值有4 種:-1:表示不自動切換0:所有寫操作發(fā)送到配置的第一個writeHost,第一個掛了切到還生存的第二個writeHost。重新啟動后以切換后的為準,切換記錄在配置文件中:dnindex.properties1:所有寫操作都隨機的發(fā)送到配置的writeHost,1.5 以后廢棄不推薦使用2:基于MySQL主從同步的狀態(tài)決定是否切換(1.4 新增)switchType 屬性用于指定主從切換的方式:-1:表示不自動切換1:默認值,自動切換2:基于MySQL主從同步的狀態(tài)決定是否切換,心跳檢測語句為:show slave status3:基于MySQL galary cluster的切換機制(適合集群,1.4.1新增),心跳檢測語句為show status like 'wsrep%'另外,slaveThreshold 屬性是用于配合writeType屬性實現(xiàn)根據(jù)主從延時來進行主從切換的,其官方文檔描述如下:
1.4 開始支持MySQL主從復制狀態(tài)綁定的讀寫分離機制,讓讀更加安全可靠,配置如下:MyCAT 心跳檢查語句配置為
show slave status,dataHost上定義兩個新屬性:switchType="2"與slaveThreshold="100",此時意味著開啟MySQL主從復制狀態(tài)綁定的讀寫分離與切換機制,Mycat心跳機制通過檢測show slave status中的"Seconds_Behind_Master"、"Slave_IO_Running"、"Slave_SQL_Running" 三個字段來確定當前主從同步的狀態(tài)以及Seconds_Behind_Master主從復制時延,當Seconds_Behind_Master > slaveThreshold時,讀寫分離篩選器會過濾掉此Slave機器,防止讀到很久之前的舊數(shù)據(jù),而當主節(jié)點宕機后,切換邏輯會檢查Slave上的Seconds_Behind_Master是否為0,為0時則表示主從同步,可以安全切換,否則不會切換。
heartbeat 標簽內(nèi)指明用于和后端數(shù)據(jù)庫進行心跳檢查的語句。例如,MySQL可以使用select user(),Oracle可以使用select 1 from dual 等。
這個標簽還有一個connectionInitSql屬性,主要是當使用Oracla數(shù)據(jù)庫時,需要執(zhí)行的初始化SQL語句就這個放到這里面來。例如:alter session set nls_date_format='yyyy-mm-dd hh34:mi:ss'
注:如果是配置主從切換的語句在1.4之后必須是:show slave status
這兩個標簽都用于配置一組主從數(shù)據(jù)庫的相關信息,Mycat用這兩個標簽配置的連接信息實例化后端連接池。唯一不同的是,writeHost 配置寫實例(master)、readHost 配置讀實例(salve),并且readHost 為writeHost 的子標簽。通過這兩個標簽可以組合讀/寫實例以滿足系統(tǒng)的要求。
在一個dataHost內(nèi)可以定義多個writeHost和readHost。但是,如果writeHost指定的后端數(shù)據(jù)庫宕機,那么這個writeHost綁定的所有readHost都將不可用。另一方面,當一個writeHost宕機時系統(tǒng)會自動檢測到,并切換到備用的writeHost 上去。
這兩個標簽的屬性相同,這里就一起介紹:
host 屬性用于標識不同實例名稱,一般writeHost名稱使用M1作為后綴,readHost則使用S1作為后綴url 屬性用于配置數(shù)據(jù)庫的連接地址,如果是使用native的dbDriver,則一般為address:port這種形式。用JDBC或其他的dbDriver,則需要特殊指定。例如,當使用JDBC 時則可以這么寫:jdbc:mysql://localhost:3306/user 屬性配置數(shù)據(jù)庫用戶名password 屬性配置數(shù)據(jù)庫密碼weight 屬性配置某個數(shù)據(jù)庫在 readhost 中作為讀節(jié)點的權重usingDecrypt 屬性指定是否對密碼加密,默認為0, 若需要開啟則配置為1<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100" randomDataNode="dn1">
<table name="travelrecord,address" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" splitTableNames="true"/>
<!-- <table name="order" primaryKey="id" dataNode="dn1$0-743" rule="auto-sharding-long" splitTableNames="true"/> -->
</schema>
<dataNode name="dn1" dataHost="localhost1" database="db1"/>
<dataNode name="dn2" dataHost="localhost1" database="db2"/>
<dataNode name="dn3" dataHost="localhost1" database="db3"/>
<!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"/> -->
<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="localhost:3306" user="root" password="123456">
<readHost host="hostS1" url="localhost:3306" user="root" password="123456"/>
</writeHost>
<writeHost host="hostM2" url="localhost:3306" user="root" password="123456"/>
</dataHost>
</mycat:schema>看完上述內(nèi)容,你們對mycat的配置文件有進一步的了解嗎?如果還想學到更多技能或想了解更多相關內(nèi)容,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀。
文章題目:mycat配置文件的詳細介紹
URL網(wǎng)址:http://www.chinadenli.net/article12/pgdjdc.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站營銷、App設計、App開發(fā)、小程序開發(fā)、做網(wǎng)站、定制網(wǎng)站
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)