MyCat 作為開源資料庫中間件,能透明化分片、讀寫分離、高可用切換。本文聚焦「不託管 MySQL 主從、僅作路由層」的輕量級部署模式,解析 schema.xml 核心配置邏輯,提供可直接落地的 XML 片段與參數詳解。
graph LR
App[應用層] --> MyCat[MyCat Proxy]
MyCat -->|寫請求| Master[(Master DB)]
MyCat -->|讀請求| Slave1[(Slave 1)]
MyCat -->|讀請求| Slave2[(Slave 2)]
Master -.->|異步複製| Slave1
Master -.->|異步複製| Slave2
MyCat 不干涉主從同步機制,僅根據 SQL 語義(SELECT vs DML)路由至對應後端。
<dataNode name="dn1" dataHost="localhost1" database="db1"/> <dataNode name="dn2" dataHost="localhost1" database="db2"/> <dataNode name="dn3" dataHost="localhost1" database="db3"/> <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="hostM" url="10.1.176.158:3306" user="root" password="123456"> </writeHost> </dataHost>
| 屬性 | 所屬節點 | 含義 | 推薦值/說明 |
|---|---|---|---|
| name | dataNode | 邏輯分片名稱 | 全域唯一,如 dn1, dn_shard_01 |
| dataHost | dataNode | 關聯的 dataHost 名稱 | 對應 dataHost@name |
| database | dataNode | 實體資料庫名 | 需在後端 MySQL 實際存在 |
| maxCon/minCon | dataHost | 連線池上下限 | 視業務併發調整,預設 1000/10 |
| balance | dataHost | 讀負載均衡策略 | 0: 不分離(全走 writeHost)、1: 全部讀節點、2: write+read、3: 所有節點 |
| writeType | dataHost | 寫入路由模式 | 0: 全部寫 writeHost、1: 隨機、2: 輪詢 |
| switchType | dataHost | 高可用切換模式 | 1: 自動切換、-1: 不切換、2: 基於 MyCat HA 決策 |
| slaveThreshold | dataHost | 從庫同步延遲閾值(秒) | 超過閾值暫停路由讀請求,防髒讀 |
| heartbeat | dataHost | 心跳檢測 SQL | 簡輕量查詢,如 select user() |
若需「一主多從 + 讀寫分離」,在 <writeHost> 內嵌套 <readHost>:
<writeHost host="hostM" url="10.1.176.158:3306" user="root" password="123456"> <readHost host="hostS1" url="10.1.176.159:3306" user="root" password="123456"/> <readHost host="hostS2" url="10.1.176.160:3306" user="root" password="123456"/> </writeHost>
並將 balance="1"(所有 SELECT 走 readHost)或 balance="2"(SELECT 隨機分發至 writeHost + readHost)。
encrypt 工具加密配置檔明文密碼maxCon、minCon、idleTimeoutheartbeat 間隔建議 10-30 秒,平衡檢測及時性與負載schema.xml 熱加載特性,配合流量染色驗證新分片規則MyCat 配置看似繁雜,實則邏輯清晰:dataNode 定義邏輯分片 → dataHost 封裝物理叢集 → balance/writeType/switchType 控制路由策略。掌握這三層關係,即可靈活應對從單機到分庫分表的架構演進。