MySQL運維5-Mycat設定

2023-12-15 06:00:21

一、schema.xml

  1.1 簡介

    schema.xml作為Mycat中最重要的組態檔之一,涵蓋了Mycat的邏輯庫、邏輯表、分片規則、分片節點即資料來源的設定。主要包括一下三組標籤

    • schema標籤
    • datanode標籤
    • datahost標籤

  1.2 schema標籤

    用於定於Mycat範例中的邏輯庫,一個Mycat範例中,可以有多個資料庫,可以通過schema標籤來劃分不同的邏輯庫。Mycat中的邏輯庫的概念,等同於MySQL中的database概念沒需要操作某個邏輯庫下的表時,就需要切換邏輯庫,同MySQL一樣,使用use xxxx語句。

    

    核心屬性:

    • name: 自定自定義的邏輯庫苦命
    • checkSQLschema: 在SQL語句操作時指定了資料庫名稱,執行時是否自動去除,true:自動去除,false不自動去除,即如果有true時,我們可以不進入資料庫查詢.
    • sqlMaxLimit: 如果未指定limit進行查詢,列表查詢模式預設查詢的條數。

    checkSQLschema引數演示:

    

     說明1:當checkSQLschema為true時,我們可以不進入資料庫查詢,即使用DB01.TB_ORDER的方式,但是如果checkSQLschema為false的時候,就不能這樣寫了,就必須要要先usr DB01;今日資料庫裡面在查詢,所以這裡大家就直接給true就行了。

  1.3 schema標籤中的table標籤

    table標籤定義Mycat中邏輯庫schema下的邏輯表,所有需要查分的表都需要在table標籤中定義。

    核心屬性

    • name:定義邏輯表表名,在該邏輯庫下唯一
    • DataNode:定義邏輯表所屬的dataNode,該屬性需要與dataNode標籤中的name對應,多個dataNode用逗號隔開
    • rule: 分片規則的名稱,分片規則名字是在rule.xml中定義的
    • primaryKey: 邏輯表對應的真是表的主鍵
    • type: 邏輯表的型別,目前邏輯表只有全域性表和普通表,如果未設定,預設是普通表,全域性表設定為global

  1.4 dataNode標籤

    

     dataNode標籤中定義了Mycat中的資料節點,也就是我們通常說的資料分片,一個dataNode標籤就是一個獨立的資料分片

    核心屬性

    • name:定義了資料節點名稱
    • dataHost:資料庫範例主機名稱,參照自dataHost標籤中name屬性
    • database:定義分片所屬資料庫

  1.5 dataHost標籤

    

    該標籤在Mycat邏輯庫中作為底層標籤,直接定義了具體的資料庫範例、讀寫分離,心跳語句。

    核心屬性:

    • name:唯一識別符號,供上層標籤使用
    • maxCon/minCon:最大連線數/最小連線數
    • balance:負載均衡策略,取值0,1,2,3 ,讀寫分離的時候,在詳細說明這四個取值的意義。
    • writeType:寫操作分發方式(0:寫操作轉發到第一個writeHost,第一個掛了,切換到第二個;1:寫操作隨機發配到設定的writeHost)
    • dbDriver:資料庫驅動,支援native和jdbc,native主要支援MySQL5+,jdbc主要支援MySQL8+

  1.6 schema.xml邏輯庫對映

    邏輯庫的名字和mysql資料庫中的名字可以不一致的,例如我們這裡設定的邏輯庫的名字是大寫的DB01,而MySQL中的資料庫名則是小寫的db01,這取決於邏輯庫和MySQL真實資料庫的對映關係。

    

    schema.xml整體設定流程即關係隱射示意

    

 二、rule.xml

  rule.xml中定義了所有拆分表的規則,在使用過程中可以靈活的使用分片演演算法,或者對同一個分片演演算法使用不同的引數,它讓分片過程可設定化,主要包含兩類標籤:tableRule,Function

  

  

  而在schema.xml中設定的分片規則就是在這裡定義的

  

  說明1:在tableRule標籤裡面主要有columns和algorithm兩個標籤。

  說明2:columns標籤主要是分表的依據

  說明3:algorithm標籤主要是,分庫分表的演演算法參照,這裡algorithm裡面的值就是Function標籤的實現。

  

  例如:auto-sharding-long 分表規則的,依據是rang-long這個演演算法。

  

  而 rang-long這個演演算法就在function標籤中有定義,而function標籤中的class就是對應這個演演算法的實現類。

  說明4:至於這裡面的分庫分表的規則具體的使用,我們會在後面分庫分表實戰章節,用到的時候在詳細說。 

三、server.xml

  server.xml組態檔包含了Mycat的系統設定,主要有兩個重要的標籤:system, user.

  3.1 system標籤

    

     重要屬性說明:

    • charset: 取值utf8: 設定Mycat的字元集,字元集需要與MySQL的字元集保持一致
    • nonePasswordLogin: 取值 [0, 1], 0:需要登入密碼登入,1:不需要登入密碼登入,預設為0,設定為1,則需要指定預設賬戶
    • useHandshakeV10: 取值 [0,1],使用該選項主要是為了能夠相容高低版本的jdbc驅動,是否採用handshakeV10來與client進行通訊,1:是,0:否
    • useSqlStat: 取值[0,1],開啟SQL實時統計 1:開啟,0:關閉,開啟之後Mycat會自動統計SQL語句的執行情況:mysql -h xxx.xxx.xxx.xxx -P 9066 -u root -p之後就可以檢視,使用show @@sql; show @@sql.low; show @@sql.sum等,分別是檢視Myact執行的sql, 執行效率比較低的SQL,SQL的整體執行情況,讀寫比例等等。
    • useGlobelTableCheak: 取值[0,1],是否開啟全域性表一致性檢查,1:開啟,0關閉
    • sqlExecuteTimeout: 取值1000等整數:SQL執行的超時時間單位為秒
    • sequnceHandleType:取值[0,1,2],用來指定Mycat全域性序列型別,0:本地檔案,1:資料庫方式,2:為時間戳方式,預設使用本地檔案方式,檔案方式主要用於測試
    • sequnceHandlePattern: 正規表示式:必須帶有MYCATSEQ或者mycatseq進入序列匹配流程
    • subqueryRelationshipCheck: 取值[true,false],子查詢存在關聯查詢的情況下,檢查關聯欄位中是否有分片欄位,預設false
    • useCompression: 取值[0,1],開啟mysql壓縮協定,0:關閉,1:開始
    • fakeMySQLVersion: 5.5,5.6,8.0.27等,設定模擬MySQL版本號
    • defaultSqlParser: 由於Mycat的最初版本使用了FoundationDB的SQL解析器,在Mycat1.3後增加了Druid解析器,所以要設定defaultSqlParser屬性來指定預設的解析器,解析器有兩個:druidparser和fdbparser,在Mycat1.4之後預設是fruidparser,fdbparser已經廢棄
    • processors: 取值[1,2....] 指定系統可用的執行緒數量,預設值為CPU核心 乘以 每個核心執行的執行緒數,processors會影響processorBufferPool,processorBufferLocalPercent,processorExecutor屬性,所以在效能調優時可以適當的修改processors的值
    • processorBufferChunk: 指定每次分配Socker Direct Buffer預設值為4096位元組,也會影響BufferPool長度,如果一次性獲取位元組過多而導致buffer不都用,則會出現警告,可以調大該值
    • processorExecutor: 指定NIOProcessor上共用businessExecutor固定執行緒池的大小,Mycat把非同步任務交給businessExecutor執行緒池,在新版本的Mycat中這個連線池使用頻率不高,可以適當的把該值調小
    • packetHeaderSize: 指定MySQL協定中的報文頭長度,預設4個位元組。
    • maxPacketSize: 指定MySQL協定可以攜帶的資料最大大小,預設值為16M
    • idleTimeout: 取值30等,指定連線的空閒時間的超時長度,如果超時將關閉資源並回收,預設30分鐘
    • txlsolation:取值[1,2,3,4], 初始化前端連線的事務隔離級別,預設為REPEATED_READ,對應數位3,READ_UNCOMMITED=1, READ_COMMITED=2,REPEATED_READ=3,SERIALIZABLE=4
    • sqlExecuteTimeout: 取值 300 等, 執行SQL的超時時間,如果SQL語句執行超時,將關閉連線,預設300秒
    • serverPort: 8066 ,定義Mycat的使用埠,預設8066
    • managerPort: 9066, 定義Mycat的管理埠,預設9066

  3.2 user標籤

    

      說明1:server.xml中允許有多個user,即同時設定多個使用者的許可權

    說明2:如果一個賬戶可以存取多個邏輯庫,多個邏輯庫之間用逗號隔開

    說明3:dml中的四個二進位制數分別代表增,改,查,刪的許可權

    說明4:如果邏輯表和邏輯庫的許可權衝突,則就近原則,即優先使用邏輯表的許可權