基於Mycat實現的mysql的讀寫分離


mycat就至關於一個調度器,具備數據庫分片功能,自己不存儲數據, 其功能是對後端的真實數據庫的數據,進行數據劃分和數據整合,方便管理mysql


HOW-Mycat-Read&&write separation


如今讓咱們經過mycat實現數據庫的讀寫分離sql

本實驗中其餘配置文件,參見            基於mysql的主從複製之Mycat簡單配置和高可用數據庫


定義讀,寫節點


vim   schema.xml
vim

19                 <table name="employee" primaryKey="ID" dataNode="dn1,dn2"
20                            rule="sharding-by-intfile" />
43         <dataHost name="server33.lalala.com" maxCon="1000" minCon="10" balance="1"
44                           writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
45                 <heartbeat>select user()</heartbeat>
46                 <!-- can have multi write hosts -->
47                 <writeHost host="hostM1" url="server33.lalala.com:3306" user="mycat"
48                                    password="Mycat+007">
49                         <!-- can have multi read hosts -->
50
51                 <readHost host="hostS1" url="server55.lalala.com:3306" user="mycat"
52                                    password="Mycat+007">
53                 </readHost>     <!-- can have multi read hosts -->
54                 <!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
55                 </writeHost>
56         </dataHost>
                        writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">


參數說明:後端


balance=」1″ writeType=」0″ switchType=」1″
負載均衡

balance
ide

一、balance=0 不開啓讀寫分離機制,全部讀操做都發送到當前可用的writehostle .
url

二、balance=1 所有的readhost與stand by writeHost 參與select語句的負載均衡。簡單的說,雙主雙從模式(M1àS1,M2àS2,而且M1和M2互爲主備),正常狀況下,M1,S1,S2都參與select語句的複雜均衡。
spa

三、balance=2 全部讀操做都隨機的在readhost和writehost上分發
線程

writeType

負載均衡類型,目前的取值有3種:
一、writeType=」0″, 全部寫操做發送到配置的第一個writeHost。
二、writeType=」1″,全部寫操做都隨機的發送到配置的writeHost。
三、writeType=」2″,不執行寫操做。

switchType

一、switchType=-1 表示不自動切換
二、switchType=1 默認值,自動切換
三、switchType=2 基於MySQL 主從同步的狀態決定是否切換



建立只寫用戶和只讀用戶


vim server.xml

80         <user name="mycat">
81                 <property name="password">Mycat+007</property>
82                 <property name="schemas">JamesMycatSchema</property>
83
84                 <!-- 表級 DML 權限設置 -->
85                 <!--            
86                 <privileges check="false">
87                         <schema name="TESTDB" dml="0110" >
88                                 <table name="tb01" dml="0000"></table>
89                                 <table name="tb02" dml="1111"></table>
90                         </schema>
91                 </privileges>          
92                  -->
93         </user>
94
95         <user name="mycat_r">
96                 <property name="password">cat</property>
97                 <property name="schemas">JamesMycatSchema</property>
98                 <property name="readOnly">true</property>
99
100         </user>



檢測


關閉salve的sql_線程

(由於咱們要作讀寫分離,因此數據庫的同步,會對實驗形成干擾)


mysql>stop slave sql_thread;
在客戶端登錄mycat:    
插入數據:5,mydog,10010


mysql -umycat -pMycat+007 -h172.25.88.33 -P8066




wKioL1jfnhKBKd_SAABBhY3AO1E512.png



插入以後再讀取,也沒有看見剛剛插入的id=5


wKioL1jfnhGSzjH4AABUc4AU51I822.png



在master(server33)的mysql數據庫登錄,db1數據庫中查詢到了剛剛插入的數據,因此寫操做是在master(server33)執行的.



wKiom1jfnhLBncmAAABQFehi-Jc982.png


slave(server44)的SQL線程被關閉了,因此slave(server44)的db1也沒有id=5的數據



wKiom1jfoRizGf3BAAAs9sEPjCM580.png



至此讀寫分離圓滿成功~~~~~

相關文章
相關標籤/搜索