1. 程式人生 > >mysql-使用mycat實現簡單的讀寫分離

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讀寫分離裡面的表,可以進行參考。