為什麼需要使用mycat?
當隨著系統資料量指數級增長後,資料庫可能會出現當機的情況。為了防止這種情況的發生,我們採用mysql的主從複製為基礎,mycat實現分庫分表儲存資料,讀寫分離減輕主資料庫的負載。
mysql主從複製
原理
一共由三個執行緒完成
- 主服務將資料的更新記錄儲存到二進位制日誌--主伺服器程式
- 從服務將主服務的二進位制日誌複製到本地中繼日誌--從服務IO程式
- 從服務讀取中繼日誌,更新本地資料--從服務SQL程式
配置主伺服器
開啟配置檔案vi /etc/my.cnf
[mysqld]
log-bin=mysql-bin #開啟二進位制日誌
server-id=1 #設定server-id,必須唯一 複製
create user 'user'@'10.168.1.249' identified by 'password';
# 授權,只授予複製和客戶端訪問許可權
grant replication slave on *.* to 'user'@'10.168.1.249';#分配許可權
# 檢視主服務狀態
show master status
配置從伺服器
開啟配置檔案vi /etc/my.cnf
[mysqld]
server-id=2 #設定server-id,必須唯一 複製
#執行復制主伺服器語句
#啟動從伺服器同步程式
start slave
#檢視slave狀態
當Slave_IO_Running與Slave_SQL_Running都為yes時,複製同步成功。
異常情況處理:
- Slave_IO_Running為NO表示無法正常連線主伺服器,檢查使用者名稱及密碼
- Slave_SQL_Running為NO一般由事務回滾造成,按以下步驟解決:
- stop slave
- set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
- start slave
mycat配置
# Java Application 配置jdk
wrapper.java.command=/lib/jvm/bin/java
wrapper.working.dir=..
server.xml
中定義使用者以及系統相關變數,如埠等
以上定義一個使用者,使用者名稱為root,密碼為qwer~!@#,可訪問的schema為test_schema一個邏輯庫。
schema.xml
中定義邏輯庫,表、分片節點等內容
schema標籤,劃分不同的邏輯庫
dataNode標籤,用於繫結邏輯庫某個具體的database
balance屬性:
負載均衡型別,目前的取值有 4 種:
- balance=0,不開啟讀寫分離機制,所有讀操作都傳送到當前可用的 write Host 上
- balance=1,所有讀操作都隨機傳送到當前的writeHost對應的readHost和備用的writeHost
- balance=2,所有的讀操作都隨機傳送到所有的writeHost,readHost上
- balance=3,所有的讀操作都只傳送到writeHost的readHost上
writeType屬性:
- writeType=0,所有寫操作傳送到配置的第一個 write Host
- writeType=1,所有寫操作都隨機的傳送到配置的 write Host
rule.xml
中定義分片規則
啟動mycat
/usr/local/mycat/bin
./mycat start
服務埠:8066
客戶端埠:9066