mysql-使用mycat實現簡單的讀寫分離
一,Mycat下載
http://www.mycat.io/是Mycat的官方網站,到這個網站可以進行Mycat的下載,在官網還可以下載《Mycat權威指南》pdf的電子檔,下載Mycat的原始碼。目前最新穩定的Mycat版本是Mycat1.6, Mycat有window,linux,unix,mac平臺對應的版本,我這裡也使用下載的是window下的1.6版本來實現讀寫分離。進行讀寫分離需要先進行主從複製,關於主從複製,參考:http://blog.csdn.net/j903829182/article/details/72844954,mycat只進行讀寫分離的中介軟體。二,Mycat的安裝
Window下的安裝:
MyCAT使用Java開發,因為用到了JDK 7的部分功能,所以在使用前請確保安裝了JDK 7.0,要求是JDK 7.0以 上,並設定了正確的Java環境變數。
我下載的是免安裝版Mycat-server-1.6-RELEASE-20161028204710-win.tar.gz,解壓到任意磁碟目錄,注意目錄不能有中文和空格。我的解壓目錄為:D:\programing,在mycat的目錄中主要有bin,lib,conf,logs目錄。
Linux環境下的安裝:
1)在linux下環境下安裝好jdk,jdk需要1.7以上。2)下載Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz,這是linux的版本,在/usr/local目錄下進行解壓得到mycat目錄。
3)開放8066埠和9066埠
firewall-cmd --zone=public --add-port=8066/tcp --permanent
firewall-cmd --permanent --zone=public --add-port=8066/udp
firewall-cmd –reload
三,修改mycat的配置檔案
1)修改配置conf/server.xml檔案,該檔案是Mycat的主配置檔案。
<user name="mycat">
<property name="password">mycat</property>
<property name="schemas">TESTDB</property>
</user>
user標籤是給mycat新增一個使用者,name是這個使用者的名字,password是密碼,schemas是這個使用者下的邏輯資料庫,多個邏輯資料庫可以用“,”逗號隔開。可以通過navicat premium的客戶端使用這個user配置的資訊連線mycat。注意mycat預設的普通連線埠是8066,管理連線埠是9066。
2)修改schema.xml檔案,程式碼如下:
<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema> <!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743" /> --> <dataNode name="dn1" dataHost="localhost1" database="first_db" /> <!--<dataNode name="dn2" dataHost="localhost1" database="db2" /> <dataNode name="dn3" dataHost="localhost1" database="db3" /> <dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" /> <dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" /> <dataNode name="jdbc_dn2" dataHost="jdbchost" database="db2" /> <dataNode name="jdbc_dn3" dataHost="jdbchost" database="db3" /> --> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- can have multi write hosts --> <writeHost host="hostM1" url="192.168.9.161:3306" user="root" password="root"> <!-- can have multi read hosts --> <readHost host="hostS2" url="192.168.9.163:3306" user="root" password="root" /> </writeHost> <!-- <writeHost host="hostS1" url="localhost:3316" user="root" password="123456" /> <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> --> </dataHost> </mycat:schema>
schema:mycat的邏輯資料庫
dataNode:節點
dataHost:節點對應的讀庫寫庫的地址和連線
balance="1" :實現讀寫分離
dbDriver="native" :表示使用什麼方式連線mysql,這裡採用mysql的協議進行連線,可以選擇jdbc,這時候就需要把java的mysql驅動包放到mycat的lib目錄下面,否則不能連線mysql
關於上面的引數的詳細配置的意思可以參考mycat權威指南:下載地址:http://www.mycat.io/
3)修改 wrapper.conf檔案
主要修改下面這一行程式碼:
# Java Application
wrapper.java.command=/usr/local/jdk1.8.0_131/bin/java
四:測試
1,我是在cenos7下面安裝的解壓配置的mycat,進行測試之前需要先啟動mycat,
進入mycat的bin目錄下:cd mycat/bin
linux下面使用./mycat start 命令啟動mycat;使用 ./mycat stop停止mycat
mycat的日誌在logs目錄下面,包含了啟動的資訊和連線的資訊
確保成功,啟動mycat
2,在安裝了mysql客戶端的機器使用下面的命令通過mycat訪問mysql:
mysql -umycat -p -h192.168.9.161 -P8066
ip是安裝了mycat的機器的ip,埠是mycat的埠,使用者是mycat的server.xml裡面的配置,mycat使用者,密碼也是mycat密碼
能夠正確登入說明mycat安裝成功了,是進行讀寫分離的前提。
3,第二步使用命令操作不方便使,現在我們用navicat premium登入mycat,輸入ip,埠,使用者名稱和密碼,需要linux開啟8066埠9066埠遠端訪問。
點選連線測試,成功以後在點選確定即連線mycat成功了。
4,測試步驟:
1),關閉主從同步stop slave;
2),往mycat插入一條資料,提交重新整理
3),觀察剛插入的資料,發現mycat並沒檢視到這條資料
4),觀看主庫,發現主庫有這條通過mycat新增的資料
5),觀看從庫,發現從庫沒有通過mycat新增的資料
6),開啟從資料庫主從同步start slave;
7),通過從庫檢視發現有剛新新增的資料
8),通過mycat檢視發現也有這條剛新增的資料
說明使用mycat進行讀寫分離成功了。我這裡的測試表使用的是http://blog.csdn.net/j903829182/article/details/72844954讀寫分離裡面的表,可以進行參考。