MyCat分庫分表、讀寫分離

Echizen_1發表於2019-02-25

為什麼需要使用mycat?

當隨著系統資料量指數級增長後,資料庫可能會出現當機的情況。為了防止這種情況的發生,我們採用mysql的主從複製為基礎,mycat實現分庫分表儲存資料,讀寫分離減輕主資料庫的負載。

mysql主從複製

原理

MyCat分庫分表、讀寫分離

一共由三個執行緒完成

  1. 主服務將資料的更新記錄儲存到二進位制日誌--主伺服器程式
  2. 從服務將主服務的二進位制日誌複製到本地中繼日誌--從服務IO程式
  3. 從服務讀取中繼日誌,更新本地資料--從服務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

MyCat分庫分表、讀寫分離

配置從伺服器

開啟配置檔案vi /etc/my.cnf

[mysqld]

server-id=2 #設定server-id,必須唯一 複製

#執行復制主伺服器語句

MyCat分庫分表、讀寫分離

#啟動從伺服器同步程式

start slave

#檢視slave狀態

MyCat分庫分表、讀寫分離

當Slave_IO_Running與Slave_SQL_Running都為yes時,複製同步成功。

異常情況處理:

  1. Slave_IO_Running為NO表示無法正常連線主伺服器,檢查使用者名稱及密碼
  2. 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 中定義使用者以及系統相關變數,如埠等

MyCat分庫分表、讀寫分離

以上定義一個使用者,使用者名稱為root,密碼為qwer~!@#,可訪問的schema為test_schema一個邏輯庫。


schema.xml 中定義邏輯庫,表、分片節點等內容

MyCat分庫分表、讀寫分離

schema標籤,劃分不同的邏輯庫

dataNode標籤,用於繫結邏輯庫某個具體的database

balance屬性:

負載均衡型別,目前的取值有 4 種:

  1. balance=0,不開啟讀寫分離機制,所有讀操作都傳送到當前可用的 write Host 上
  2. balance=1,所有讀操作都隨機傳送到當前的writeHost對應的readHost和備用的writeHost
  3. balance=2,所有的讀操作都隨機傳送到所有的writeHost,readHost上
  4. balance=3,所有的讀操作都只傳送到writeHost的readHost上

writeType屬性:

  1. writeType=0,所有寫操作傳送到配置的第一個 write Host
  2. writeType=1,所有寫操作都隨機的傳送到配置的 write Host

rule.xml 中定義分片規則

啟動mycat

/usr/local/mycat/bin 

./mycat start

服務埠:8066

客戶端埠:9066


相關文章