共計(jì) 11242 個(gè)字符,預(yù)計(jì)需要花費(fèi) 29 分鐘才能閱讀完成。
這篇文章主要介紹“Mycat 三大核心配置文件是什么”,在日常操作中,相信很多人在 Mycat 三大核心配置文件是什么問題上存在疑惑,丸趣 TV 小編查閱了各式資料,整理出簡(jiǎn)單好用的操作方法,希望對(duì)大家解答”Mycat 三大核心配置文件是什么”的疑惑有所幫助!接下來,請(qǐng)跟著丸趣 TV 小編一起來學(xué)習(xí)吧!
Mycat 的三大核心配置文件:server.xml、schema.xml 和 rule.xml。
server.xml
server.xml 幾乎保存了所有 mycat 需要的系統(tǒng)配置信息。其在代碼內(nèi)直接的映射類為 SystemConfig 類。現(xiàn)在就對(duì)這個(gè)文件中的配置進(jìn)行相關(guān)的介紹
user 標(biāo)簽
user name= test property name= password test /property property name= schemas TESTDB /property property name= readOnly true /property /user
server.xml 中的標(biāo)簽本就不多,這個(gè)標(biāo)簽主要用于定義登錄 mycat 的用戶和權(quán)限。例如上面的例子中,我定義了一個(gè)用戶,用戶名為 test、密碼也為 test,可訪問的 schema 也只有 TESTDB 一個(gè)。如果我在 schema.xml 中定義了多個(gè) schema,那么這個(gè)用戶是無法訪問其他的 schema。在 mysql 客戶端看來則是無法使用 use 切換到這個(gè)其他的數(shù)據(jù)庫。如果使用了 use 命令,則 mycat 會(huì)報(bào)出這樣的錯(cuò)誤提示:ERROR 1044 (HY000): Access denied for user test to database xxx 這個(gè)標(biāo)簽嵌套的 property 標(biāo)簽則是具體聲明的屬性值,正如上面的例子。我們可以修改 user 標(biāo)簽的 name 屬性來指定用戶名; 修改 password 內(nèi)的文本來修改密碼; 修改 readOnly 為 true 或 false 來限制用戶是否只是可讀的; 修改 schemas 內(nèi)的文本來控制用戶可放問的 schema; 修改 schemas 內(nèi)的文本來控制用戶可訪問的 schema,同時(shí)訪問多個(gè) schema 的話使用 , 隔開,例如:
property name= schemas TESTDB,db1,db2 /property
system 標(biāo)簽
這個(gè)標(biāo)簽內(nèi)嵌套的所有 property 標(biāo)簽都與系統(tǒng)配置有關(guān),請(qǐng)注意,下面我會(huì)省去標(biāo)簽 property 直接使用這個(gè)標(biāo)簽的 name 屬性內(nèi)的值來介紹這個(gè)屬性的作用。
defaultSqlParser 屬性
由于 mycat 最初是時(shí)候 Foundation DB 的 sql 解析器,而后才添加的 Druid 的解析器。所以這個(gè)屬性用來指定默認(rèn)的解析器。目前的可用的取值有:druidparser 和 fdbparser。使用的時(shí)候可以選擇其中的一種,目前一般都使用 druidparser。
processors 屬性
這個(gè)屬性主要用于指定系統(tǒng)可用的線程數(shù),默認(rèn)值為 Runtime.getRuntime().availableProcessors() 方法返回的值。主要影響 processorBufferPool、processorBufferLocalPercent、processorExecutor 屬性。NIOProcessor 的個(gè)數(shù)也是由這個(gè)屬性定義的,所以調(diào)優(yōu)的時(shí)候可以適當(dāng)?shù)恼{(diào)高這個(gè)屬性。
processorBufferChunk 屬性
這個(gè)屬性指定每次分配 Socket Direct Buffer 的大小,默認(rèn)是 4096 個(gè)字節(jié)。這個(gè)屬性也影響 buffer pool 的長(zhǎng)度。
processorBufferPool 屬性
這個(gè)屬性指定 bufferPool 計(jì)算 比例值。由于每次執(zhí)行 NIO 讀、寫操作都需要使用到 buffer,系統(tǒng)初始化的時(shí)候會(huì)建立一定長(zhǎng)度的 buffer 池來加快讀、寫的效率,減少建立 buffer 的時(shí)間。
兩個(gè)主要的 buffer 池
BufferPool 和 ThreadLocalPool
BufferPool 由 ThreadLocalPool 組合而成,每次從 BufferPool 中獲取 buffer 都會(huì)優(yōu)先獲取 ThreadLocalPool 中的 buffer,未命中之后才會(huì)去獲取 BufferPool 中的 buffer。也就是說 ThreadLocalPool 是作為 BufferPool 的二級(jí)緩存,每個(gè)線程內(nèi)部自己使用的。當(dāng)然,這其中還有一些限制條件需要線程的名字是由 $_開頭。然而,BufferPool 上的 buffer 則是每個(gè) NIOProcessor 都共享的。默認(rèn)這個(gè)屬性的值為:
默認(rèn) bufferChunkSize(4096) * processors 屬性 * 1000 BufferPool 的總長(zhǎng)度 = bufferPool / bufferChunk。
若 bufferPool 不是 bufferChunk 的整數(shù)倍,則總長(zhǎng)度為前面計(jì)算得出的商 + 1 假設(shè)系統(tǒng)線程數(shù)為 4,其他都為屬性的默認(rèn)值,則:
bufferPool = 4096 * 4 * 1000 BufferPool 的總長(zhǎng)度 : 4000 = 16384000 / 4096
processorBufferLocalPercent 屬性
前面提到了 ThreadLocalPool。這個(gè)屬性就是用來控制分配這個(gè) pool 的大小用的,但其也并不是一個(gè)準(zhǔn)確的值,也是一個(gè)比例值。這個(gè)屬性默認(rèn)值為 100。
線程緩存百分比 = bufferLocalPercent / processors 屬性。
例如,系統(tǒng)可以同時(shí)運(yùn)行 4 個(gè)線程,使用默認(rèn)值,則根據(jù)公式每個(gè)線程的百分比為 25。最后根據(jù)這個(gè)百分比來計(jì)算出具體的。
ThreadLocalPool 的長(zhǎng)度公式如下:
ThreadLocalPool 的長(zhǎng)度 = 線程緩存百分比 * BufferPool 長(zhǎng)度 / 100
假設(shè) BufferPool 的長(zhǎng)度為 4000,其他保持默認(rèn)值。那么最后每個(gè)線程建立上的 ThreadLocalPool 的長(zhǎng)度為:1000 = 25 * 4000 / 100
processorExecutor 屬性
這個(gè)屬性主要用于指定 NIOProcessor 上共享的 businessExecutor 固定線程池大小。mycat 在需要處理一些異步邏輯的時(shí)候會(huì)把任務(wù)提交到這個(gè)線程池中。新版本中這個(gè)連接池的使用頻率不是很大了,可以設(shè)置一個(gè)較小的值。
sequnceHandlerType 屬性
指定使用 Mycat 全局序列的類型。0 為本地文件方式,1 為數(shù)據(jù)庫方式。默認(rèn)是使用本地文件方式,文件方式主要只是用于測(cè)試使用。
TCP 連接相關(guān)屬性
StandardSocketOptions.SO_RCVBUF StandardSocketOptions.SO_SNDBUF StandardSocketOptions.TCP_NODELAY
以上這三個(gè)屬性,分別由:
frontSocketSoRcvbuf 默認(rèn)值:1024 * 1024
frontSocketSoSndbuf 默認(rèn)值:4 * 1024 * 1024
frontSocketNoDelay 默認(rèn)值:1
backSocketSoRcvbuf 默認(rèn)值:4 * 1024 * 1024
backSocketSoSndbuf 默認(rèn)值:1024 * 1024
backSocketNoDelay 默認(rèn)值:1
各自設(shè)置前后端 TCP 連接參數(shù)。Mycat 在每次建立前、后端連接的時(shí)候都會(huì)使用這些參數(shù)初始化連接??梢园聪到y(tǒng)要求適當(dāng)?shù)恼{(diào)整這些 buffer 的大小。TCP 連接參數(shù)的定義,可以查看 Javadoc。MySQL 連接相關(guān)屬性初始化 mysql 前后端連接所涉及到的一些屬性:
packetHeaderSize : 指定 Mysql 協(xié)議中的報(bào)文頭長(zhǎng)度。默認(rèn) 4。
maxPacketSize : 指定 Mysql 協(xié)議可以攜帶的數(shù)據(jù)最大長(zhǎng)度。默認(rèn) 16M。
idleTimeout : 指定連接的空閑超時(shí)時(shí)間。某連接在發(fā)起空閑檢查下,發(fā)現(xiàn)距離上次使用超過了空閑時(shí)間,那么這個(gè)連接會(huì)被回收,就是被直接的關(guān)閉掉。默認(rèn) 30 分鐘。
charset : 連接的初始化字符集。默認(rèn)為 utf8。
txIsolation : 前端連接的初始化事務(wù)隔離級(jí)別,只在初始化的時(shí)候使用,后續(xù)會(huì)根據(jù)客戶端傳遞過來的屬性對(duì)后端數(shù)據(jù)庫連接進(jìn)行同步。默認(rèn)為 REPEATED_READ。
sqlExecuteTimeout:SQL 執(zhí)行超時(shí)的時(shí)間,Mycat 會(huì)檢查連接上最后一次執(zhí)行 SQL 的時(shí)間,若超過這個(gè)時(shí)間則會(huì)直接關(guān)閉這連接。默認(rèn)時(shí)間為 300 秒。
周期間隔相關(guān)屬性
mycat 中有幾個(gè)周期性的任務(wù)來異步的處理一些我需要的工作。這些屬性就在系統(tǒng)調(diào)優(yōu)的過程中也是比不可少的。
processorCheckPeriod : 清理 NIOProcessor 上前后端空閑、超時(shí)和關(guān)閉連接的間隔時(shí)間。默認(rèn)是 1 秒。
dataNodeIdleCheckPeriod : 對(duì)后端連接進(jìn)行空閑、超時(shí)檢查的時(shí)間間隔,默認(rèn)是 60 秒。
dataNodeHeartbeatPeriod : 對(duì)后端所有讀、寫庫發(fā)起心跳的間隔時(shí)間,默認(rèn)是 10 秒。
服務(wù)相關(guān)屬性
這里介紹一個(gè)與服務(wù)相關(guān)的屬性,主要會(huì)影響外部系統(tǒng)對(duì) myact 的感知。
bindIp : mycat 服務(wù)監(jiān)聽的 IP 地址,默認(rèn)值為 0.0.0.0。
serverPort : 定義 mycat 的使用端口,默認(rèn)值為 8066。
managerPort : 定義 mycat 的管理端口,默認(rèn)值為 9066。
schema.xml
schema.xml 作為 MyCat 中重要的配置文件之一,管理著 MyCat 的邏輯庫、表、分片規(guī)則、DataNode 以及 DataSource。弄懂這些配置,是正確使用 MyCat 的前提。這里就一層層對(duì)該文件進(jìn)行解析。
?xml version= 1.0 ? !DOCTYPE mycat:schema SYSTEM schema.dtd mycat:schema xmlns:mycat= http://org.opencloudb/ schema name= TESTDB checkSQLschema= false sqlMaxLimit= 100 table name= user dataNode= dn1,dn2 rule= auto-sharding-long / table name= stat_tcp_stream dataNode= dn2,dn3 rule= auto-sharding-long / /schema dataNode name= dn1 dataHost= localhost1 database= mpos_tshark_miner_2014 / dataNode name= dn2 dataHost= localhost2 database= mpos_tshark_miner2014 / dataNode name= dn3 dataHost= localhost3 database= mpos_tshark_hrtel / dataHost name= localhost1 maxCon= 1000 minCon= 10 balance= 0 dbType= mysql dbDriver= jdbc writeType= 0 switchType= 1 slaveThreshold= 100 heartbeat select user() /heartbeat writeHost host= hostM1 url= jdbc:mysql://192.168.1.150:5029 user= root password= root /writeHost /dataHost dataHost name= localhost2 maxCon= 1000 minCon= 1 balance= 0 dbType= mysql dbDriver= jdbc heartbeat /heartbeat writeHost host= hostM2 url= jdbc:mysql://192.168.1.150:5029 user= root password= root /writeHost /dataHost dataHost name= localhost3 maxCon= 1000 minCon= 1 balance= 0 dbType= mysql dbDriver= jdbc heartbeat /heartbeat writeHost host= hostM3 url= jdbc:mysql://192.168.1.150:5029 user= root password= root /writeHost /dataHost /mycat:schema
schema 標(biāo)簽
dataNode
該屬性用于綁定邏輯庫到某個(gè)具體的 database 上,如果定義了這個(gè)屬性,那么這個(gè)邏輯庫就不能工作在分庫分表模式下了。也就是說對(duì)這個(gè)邏輯庫的所有操作會(huì)直接作用到綁定的 dataNode 上,這個(gè) schema 就可以用作讀寫分離和主從切換,具體如下配置:
schema name= USERDB checkSQLschema= false sqlMaxLimit= 100 dataNode= dn1 ! mdash; 這里不能配置任何邏輯表信息 -- /schema
那么現(xiàn)在 USERDB 就綁定到 dn1 所配置的具體 database 上,可以直接訪問這個(gè) database。當(dāng)然該屬性只能配置綁定到一個(gè) database 上,不能綁定多個(gè) dn。
checkSQLschema
當(dāng)該值設(shè)置為 true 時(shí),如果我們執(zhí)行語句 select * from TESTDB.travelrecord; 則 MyCat 會(huì)把語句修改為 select * from travelrecord;。即把表示 schema 的字符去掉,避免發(fā)送到后端數(shù)據(jù)庫執(zhí)行時(shí)報(bào) (ERROR 1146 (42S02): Table lsquo;testdb.travelrecord rsquo; doesn rsquo;t exist)。不過,即使設(shè)置該值為 true ,如果語句所帶的是并非是 schema 指定的名字,例如:select * from db1.travelrecord; 那么 MyCat 并不會(huì)刪除 db1 這個(gè)字段,如果沒有定義該庫的話則會(huì)報(bào)錯(cuò),所以在提供 SQL 語句的最好是不帶這個(gè)字段。
sqlMaxLimit
當(dāng)該值設(shè)置為某個(gè)數(shù)值時(shí)。每條執(zhí)行的 SQL 語句,如果沒有加上 limit 語句,MyCat 也會(huì)自動(dòng)的加上所對(duì)應(yīng)的值。例如設(shè)置值為 100,執(zhí)行 select * from TESTDB.travelrecord; 的效果為和執(zhí)行 select * from TESTDB.travelrecord limit 100; 相同。不設(shè)置該值的話,MyCat 默認(rèn)會(huì)把查詢到的信息全部都展示出來,造成過多的輸出。所以,在正常使用中,還是建議加上一個(gè)值,用于減少過多的數(shù)據(jù)返回。當(dāng)然 SQL 語句中也顯式的指定 limit 的大小,不受該屬性的約束。
table 標(biāo)簽
table name= travelrecord dataNode= dn1,dn2,dn3 rule= auto-sharding-long /table
Table 標(biāo)簽定義了 MyCat 中的邏輯表,所有需要拆分的表都需要在這個(gè)標(biāo)簽中定義。
name 屬性
定義邏輯表的表名,這個(gè)名字就如同我在數(shù)據(jù)庫中執(zhí)行 create table 命令指定的名字一樣,同個(gè) schema 標(biāo)簽中定義的名字必須唯一。
dataNode 屬性
定義這個(gè)邏輯表所屬的 dataNode, 該屬性的值需要和 dataNode 標(biāo)簽中 name 屬性的值相互對(duì)應(yīng)。如果需要定義的 dn 過多可以使用如下的方法減少配置:
table name= travelrecord dataNode= multipleDn$0-99,multipleDn2$100-199 rule= auto-sharding-long /table dataNode name= multipleDn dataHost= localhost1 database= db$0-99 /dataNode dataNode name= multipleDn2 dataHost= localhost1 database= db$0-99 /dataNode
這里需要注意的是 database 屬性所指定的真實(shí) database name 需要在后面添加一個(gè),例如上面的例子中,我需要在真實(shí)的 mysql 上建立名稱為 dbs0 到 dbs99 的 database。
rule 屬性
該屬性用于指定邏輯表要使用的規(guī)則名字,規(guī)則名字在 rule.xml 中定義,必須與 tableRule 標(biāo)簽中 name 屬性屬性值一一對(duì)應(yīng)。
primaryKey 屬性
該邏輯表對(duì)應(yīng)真實(shí)表的主鍵,例如:分片的規(guī)則是使用非主鍵進(jìn)行分片的,那么在使用主鍵查詢的時(shí)候,就會(huì)發(fā)送查詢語句到所有配置的 DN 上,如果使用該屬性配置真實(shí)表的主鍵。難么 MyCat 會(huì)緩存主鍵與具體 DN 的信息,那么再次使用非主鍵進(jìn)行查詢的時(shí)候就不會(huì)進(jìn)行廣播式的查詢,就會(huì)直接發(fā)送語句給具體的 DN,但是盡管配置該屬性,如果緩存并沒有命中的話,還是會(huì)發(fā)送語句給具體的 DN,來獲得數(shù)據(jù)。
type 屬性
該屬性定義了邏輯表的類型,目前邏輯表只有“全局表”和”普通表”兩種類型。對(duì)應(yīng)的配置:全局表:global。普通表:不指定該值為 globla 的所有表。
autoIncrement 屬性
MySQL 對(duì)非自增長(zhǎng)主鍵,使用 last_insert_id() 是不會(huì)返回結(jié)果的,只會(huì)返回 0。所以,只有定義了自增長(zhǎng)主鍵的表才可以用 last_insert_id() 返回主鍵值。mycat 目前提供了自增長(zhǎng)主鍵功能,但是如果對(duì)應(yīng)的 mysql 節(jié)點(diǎn)上數(shù)據(jù)表,沒有定義 auto_increment,那么在 mycat 層調(diào)用 last_insert_id() 也是不會(huì)返回結(jié)果的。由于 insert 操作的時(shí)候沒有帶入分片鍵,mycat 會(huì)先取下這個(gè)表對(duì)應(yīng)的全局序列,然后賦值給分片鍵。這樣才能正常的插入到數(shù)據(jù)庫中,最后使用 last_insert_id() 才會(huì)返回插入的分片鍵值。如果要使用這個(gè)功能最好配合使用數(shù)據(jù)庫模式的全局序列。使用 autoIncrement=“true” 指定這個(gè)表有使用自增長(zhǎng)主鍵,這樣 mycat 才會(huì)不拋出分片鍵找不到的異常。使用 autoIncrement=“false” 來禁用這個(gè)功能,當(dāng)然你也可以直接刪除掉這個(gè)屬性。默認(rèn)就是禁用的。
needAddLimit 屬性
指定表是否需要自動(dòng)的在每個(gè)語句后面加上 limit 限制。由于使用了分庫分表,數(shù)據(jù)量有時(shí)會(huì)特別巨大。這時(shí)候執(zhí)行查詢語句,如果恰巧又忘記了加上數(shù)量限制的話。那么查詢所有的數(shù)據(jù)出來,也夠等上一小會(huì)兒的。所以,mycat 就自動(dòng)的為我們加上 LIMIT 100。當(dāng)然,如果語句中有 limit,就不會(huì)在次添加了。這個(gè)屬性默認(rèn)為 true, 你也可以設(shè)置成 false` 禁用掉默認(rèn)行為。
childTable 標(biāo)簽
childTable 標(biāo)簽用于定義 E - R 分片的子表。通過標(biāo)簽上的屬性與父表進(jìn)行關(guān)聯(lián)
table name= customer primaryKey= ID dataNode= dn1,dn2 rule= sharding-by-intfile 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
name 屬性
定義子表的表名。
joinKey 屬性
插入子表的時(shí)候會(huì)使用這個(gè)列的值查找父表存儲(chǔ)的數(shù)據(jù)節(jié)點(diǎn)。
parentKey 屬性
屬性指定的值一般為與父表建立關(guān)聯(lián)關(guān)系的列名。程序首先獲取 joinkey 的值,再通過 parentKey 屬性指定的列名產(chǎn)生查詢語句,通過執(zhí)行該語句得到父表存儲(chǔ)在哪個(gè)分片上。從而確定子表存儲(chǔ)的位置。
primaryKey 屬性
同 table 標(biāo)簽所描述的。
needAddLimit 屬性
同 table 標(biāo)簽所描述的。
dataNode 標(biāo)簽
dataNode name= dn1 dataHost= lch4307 database= db1 /dataNode
dataNode 標(biāo)簽定義了 MyCat 中的數(shù)據(jù)節(jié)點(diǎn),也就是我們通常說所的數(shù)據(jù)分片。一個(gè) dataNode 標(biāo)簽就是一個(gè)獨(dú)立的數(shù)據(jù)分片。例子中所表述的意思為:使用名字為 lch4307 數(shù)據(jù)庫實(shí)例上的 db1 物理數(shù)據(jù)庫,這就組成一個(gè)數(shù)據(jù)分片,最后,我們使用名字 dn1 標(biāo)識(shí)這個(gè)分片。
name 屬性
定義數(shù)據(jù)節(jié)點(diǎn)的名字,這個(gè)名字需要是唯一的,我們需要在 table 標(biāo)簽上應(yīng)用這個(gè)名字,來建立表與分片對(duì)應(yīng)的關(guān)系。
dataHost 屬性
該屬性用于定義該分片屬于哪個(gè)數(shù)據(jù)庫實(shí)例的,屬性值是引用 dataHost 標(biāo)簽上定義的 name 屬性。
database 屬性
該屬性用于定義該分片屬性哪個(gè)具體數(shù)據(jù)庫實(shí)例上的具體庫,因?yàn)檫@里使用兩個(gè)緯度來定義分片,就是:實(shí)例 + 具體的庫。因?yàn)槊總€(gè)庫上建立的表和表結(jié)構(gòu)是一樣的。所以這樣做就可以輕松的對(duì)表進(jìn)行水平拆分。
dataHost 標(biāo)簽
作為 Schema.xml 中最后的一個(gè)標(biāo)簽,該標(biāo)簽在 mycat 邏輯庫中也是作為最底層的標(biāo)簽存在,直接定義了具體的數(shù)據(jù)庫實(shí)例、讀寫分離配置和心跳語句?,F(xiàn)在我們就解析下這個(gè)標(biāo)簽。
dataHost name= localhost1 maxCon= 1000 minCon= 10 balance= 0 writeType= 0 dbType= mysql dbDriver= native 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= hostS1 url= localhost:3306 user= root password= 123456 / -- /writeHost !-- writeHost host= hostM2 url= localhost:3316 user= root password= 123456 / -- /dataHost
name 屬性
唯一標(biāo)識(shí) dataHost 標(biāo)簽,供上層的標(biāo)簽使用。
maxCon 屬性
指定每個(gè)讀寫實(shí)例連接池的最大連接。也就是說,標(biāo)簽內(nèi)嵌套的 writeHost、readHost 標(biāo)簽都會(huì)使用這個(gè)屬性的值來實(shí)例化出連接池的最大連接數(shù)。
minCon 屬性
指定每個(gè)讀寫實(shí)例連接池的最小連接,初始化連接池的大小。
balance 屬性
負(fù)載均衡類型,目前的取值有 3 種:
balance=“0”, 所有讀操作都發(fā)送到當(dāng)前可用的 writeHost 上。
balance=“1”,所有讀操作都隨機(jī)的發(fā)送到 readHost。
balance=“2”,所有讀操作都隨機(jī)的在 writeHost、readhost 上分發(fā)。
writeType 屬性
負(fù)載均衡類型,目前的取值有 3 種:
writeType=“0”, 所有寫操作都發(fā)送到可用的 writeHost 上。
writeType=“1”,所有寫操作都隨機(jī)的發(fā)送到 readHost。
writeType=“2”,所有寫操作都隨機(jī)的在 writeHost、readhost 分上發(fā)。
dbType 屬性
指定后端連接的數(shù)據(jù)庫類型,目前支持二進(jìn)制的 mysql 協(xié)議,還有其他使用 JDBC 連接的數(shù)據(jù)庫。例如:mongodb、oracle、spark 等。
dbDriver 屬性
指定連接后端數(shù)據(jù)庫使用的 Driver,目前可選的值有 native 和 JDBC。使用 native 的話,因?yàn)檫@個(gè)值執(zhí)行的是二進(jìn)制的 mysql 協(xié)議,所以可以使用 mysql 和 maridb。其他類型的數(shù)據(jù)庫則需要使用 JDBC 驅(qū)動(dòng)來支持。如果使用 JDBC 的話需要將符合 JDBC 4 標(biāo)準(zhǔn)的驅(qū)動(dòng) JAR 包放到 MYCAT\lib 目錄下,并檢查驅(qū)動(dòng) JAR 包中包括如下目錄結(jié)構(gòu)的文件:META-INF\services\java.sql.Driver。在這個(gè)文件內(nèi)寫上具體的 Driver 類名,例如:com.mysql.jdbc.Driver。
heartbeat 標(biāo)簽
這個(gè)標(biāo)簽內(nèi)指明用于和后端數(shù)據(jù)庫進(jìn)行心跳檢查的語句。例如,MYSQL 可以使用 select user(),Oracle 可以使用 select 1 from dual 等。這個(gè)標(biāo)簽還有一個(gè) connectionInitSql 屬性,主要是當(dāng)使用 Oracla 數(shù)據(jù)庫時(shí),需要執(zhí)行的初始化 SQL 語句就這個(gè)放到這里面來。例如:alter session set nls_date_format= yyyy-mm-dd hh34:mi:ss
writeHost 標(biāo)簽、readHost 標(biāo)簽
這兩個(gè)標(biāo)簽都指定后端數(shù)據(jù)庫的相關(guān)配置給 mycat,用于實(shí)例化后端連接池。唯一不同的是,writeHost 指定寫實(shí)例、readHost 指定讀實(shí)例,組著這些讀寫實(shí)例來滿足系統(tǒng)的要求。在一個(gè) dataHost 內(nèi)可以定義多個(gè) writeHost 和 readHost。但是,如果 writeHost 指定的后端數(shù)據(jù)庫宕機(jī),那么這個(gè) writeHost 綁定的所有 readHost 都將不可用。另一方面,由于這個(gè) writeHost 宕機(jī)系統(tǒng)會(huì)自動(dòng)的檢測(cè)到,并切換到備用的 writeHost 上去。這兩個(gè)標(biāo)簽的屬性相同,這里就一起介紹。
host 屬性
用于標(biāo)識(shí)不同實(shí)例,一般 writeHost 我們使用 M1,readHost 我們用 S1。
url 屬性
后端實(shí)例連接地址,如果是使用 native 的 dbDriver,則一般為 address:port 這種形式。用 JDBC 或其他的 dbDriver,則需要特殊指定。當(dāng)使用 JDBC 時(shí)則可以這么寫:jdbc:mysql://localhost:3306/。
user 屬性
后端存儲(chǔ)實(shí)例需要的用戶名字
password 屬性
后端存儲(chǔ)實(shí)例需要的密碼
rule.xml
rule.xml 里面就定義了我們對(duì)表進(jìn)行拆分所涉及到的規(guī)則定義。我們可以靈活的對(duì)表使用不同的分片算法,或者對(duì)表使用相同的算法但具體的參數(shù)不同。這個(gè)文件里面主要有 tableRule 和 function 這兩個(gè)標(biāo)簽。在具體使用過程中可以按照需求添加 tableRule 和 function。
tableRule 標(biāo)簽
這個(gè)標(biāo)簽定義表規(guī)則。定義的表規(guī)則,在 rule.xml:
tableRule name= rule1 rule columns id /columns algorithm func1 /algorithm /rule /tableRule
name 屬性指定唯一的名字,用于標(biāo)識(shí)不同的表規(guī)則。內(nèi)嵌的 rule 標(biāo)簽則指定對(duì)物理表中的哪一列進(jìn)行拆分和使用什么路由算法。columns 內(nèi)指定要拆分的列名字。algorithm 使用 function 標(biāo)簽中的 name 屬性。連接表規(guī)則和具體路由算法。當(dāng)然,多個(gè)表規(guī)則可以連接到同一個(gè)路由算法上。標(biāo)簽內(nèi)使用。讓邏輯表使用這個(gè)規(guī)則進(jìn)行分片。
function 標(biāo)簽
function name= hash-int >其中,各屬性如下所示。
name 指定算法的名字。
class 制定路由算法具體的類名字。
property 為具體算法需要用到的一些屬性。
到此,關(guān)于“Mycat 三大核心配置文件是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注丸趣 TV 網(wǎng)站,丸趣 TV 小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!