mycat
mycat的優勢:
- 實作後端資料庫的讀寫分離和負載均衡
- 支援寫DB高可用,
- 作用
- 資料庫進行垂直切分,
- 進行水準切分
- 控制資料庫連接配接的數量
- mycat 基本元素
- 邏輯庫:即後端切分後的資料庫
- 對應後端多個實體資料庫
- 邏輯庫中不儲存資料
邏輯表
- 對應用來說相當于mysql的資料表
- 邏輯表可對應後端多個實體資料庫的表
- 邏輯表中不儲存資料
邏輯表的分類
- 分片表和非分片表按是否被分片劃分
- 全局表,在所有分片中都存在的表
- ER關系表,按照ER關系分片的表
安裝注意事項
- jdk必須在1.7及以上版本
- 在conf裡面,修改wrapper.conf中修改配置記憶體大小(在自己的虛拟機裡面,這需要修改,不然記憶體不夠用)
配置檔案
- server.xml:是服務之間的配,使用者認證之類
- schema.xml:就是邏輯表,邏輯庫的配置
- rule.xml:就是對分表分庫的規則的配置
- log4j2.xml:就是日志檔案
server.xml
- 配置系統參數
- 配置使用者通路權限
- 配置sql防火牆和sql攔截功能 配置端口資訊 基本的一些配置
- 使用者權限配置
- 密碼加密 執行指令之後,放入配置檔案,并在配置上面加上
- 配置通路的資料庫
- 配置通路的權限 1111 四位數表示新增,修改,查詢和删除的權限,1表示有,0表示沒有
log4j2.xml
- 配置輸出日志的格式
- 配置輸出日志的級别
- 配置講解:
- %d{yyyy-MM-dd HH:mm:ss:SSS}:表示日志的時間格式
- %5p表示日志輸出的級别
- %t:線程資訊
- %m表示代碼中提定的資訊
- %n 表示輸出一個回車符号
- 日志級别
- 配置講解:
rule.xml
- 配置水準分片的分片規則
- 配置分片規則對應的分片函數
- 名字要唯一(全局唯一,最好是子產品+表+分塊數+分塊依據)
- 名字就是算法的名稱,放在algorithm标簽中
常用的分片算法
- 簡單取模:PartitionByMod
- 哈希取模:PartitionByHash
- 分片枚舉:PartitionByFileMap
- 字元串範圍取模
簡單取模
- 可用于分片列為整數的表
- 分片列mode分片基數
- 類全名;io.mycat.route.function.PartitionByMod(不同版本class不同,找官方文檔确認)
哈希取模:PartitionByHash
- 可以用于多種資料類型,字元串,日期等
- hash(分片列)mode分片基數
- 類全名:io,mycat.route.function.PartitionByHash(不同版本class不同,找官方文檔确認)
分片枚舉:PartitionByFileMap
- 根據可能的枚舉值來指定資料存儲的位置
- $mycat/conf增加MapFile配置枚舉值同節點的對應關系
- 類全名:io,mycat.route.function.PartitionByFileMap(不同版本class不同,找官方文檔确認)
字元串範圍取模
- 可以根據字元串前N個字元确認存儲位置
- $mycat/conf增加MapFile配置字元串取值範圍和節點的關系
- 類全名:io,mycat.route.function.PartitionByPrefixPatten(不同版本class不同,找官方文檔确認)
schema.xml
- 配置邏輯表和邏輯庫
- 配置邏輯表存儲的資料節點
- 配置資料節點對應的實體資料庫伺服器資訊
- 配置邏輯庫,name是邏輯庫的命名,sqlMaxLimit是傳回最大資料數,checkSQLschema檢查發給mycat的語句中是否包含庫名
- name是邏輯表的名稱,primaryKey是邏輯表的主鍵,dataNode是表資料所存儲的資料節點,rule是rule.xml中配置的分片規則
- name屬性必須唯一,dataHost定義分片所在的實體主機