1. 程式人生 > >使用MyCat中介軟體代理MySql讀寫分離

使用MyCat中介軟體代理MySql讀寫分離

其前提條件:

mysql主從複製已經配置完成

配置過程可以參考這篇文章

目的

使用mycat作為一個訪問資料庫前的一層,用來管理讀寫操作,而不用配置多個數據源訪問不同mysql伺服器

當前資訊:

主mysql:118.25.178.145,使用者名稱root,密碼123456

從mysql:106.12.203.18,使用者名稱root,密碼123456

mycat:118.25.178.145

安裝

  • mycat需要jre環境
  • 修改環境變數
  • 修改配置檔案資訊:schema.xml,server.xml

jre環境

修改環境變數

解壓完後配置

vim /etc/profile

新增

MYCAT_HOME=解壓目錄
// 新增PATH,在末尾加
PATH=$PATH:$MYCAT_HOME/bin 

source /etc/profile

修改配置檔案

schema.xml

<?xml version="1.0"?>
 
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
 
<mycat:schema xmlns:mycat="http://io.mycat/">
 
      <!-- 
      	定義MyCat的邏輯庫,邏輯庫的概念與MySQL中的 database 概念相同 
      	name 為通過客戶端連線查詢到的邏輯庫名 也就是對應真實數庫的別名
      	checkSQLschema 表明是否檢查並過濾SQL中包含schema的情況,如邏輯庫為 realfake_schema1,則可能寫為select * from realfake_schema1.edu_user,此時會自動過濾TESTDB,SQL變為select * from edu_user,若不會出現上述寫法,則可以關閉屬性為false
      	sqlMaxLimit預設返回的最大記錄數限制,MyCat1.4版本里面,使用者的Limit引數會覆蓋掉MyCat的sqlMaxLimit預設設定
      -->

      <schema name="realfake_schema1" checkSQLschema="false" sqlMaxLimit="100" dataNode="realfake_dn1"></schema>
 
      <!-- 
      	定義MyCat的資料節點 
      	name 資料表示節點名稱
      	dataHost表示資料主機名稱
      	database表示該節點要路由的資料庫的名稱
      -->
 
      <dataNode name="realfake_dn1" dataHost="dtHost1" database="test" />
 
      <!-- 使用MyCat託管MySQL主從切換 -->
 
      <!-- 定義資料主機dtHost1,連線到MySQL讀寫分離叢集,並配置了讀寫分離和主從切換 -->
 
      <dataHost name="dtHost1" maxCon="500" minCon="20" balance="1"
 
           writeType="0" dbType="mysql" dbDriver="native" switchType="2" slaveThreshold="100">
 
           <!-- 通過show slave status檢測主從狀態,當主宕機以後,發生切換,從變為主,原來的主變為從,這時候show slave status就會發生錯誤,因為原來的主沒有開啟slave,不建議直接使用switch操作,而是在DB中做主從對調。 -->
 
           <heartbeat>show slave status</heartbeat>
 
           <!-- can have multi write hosts -->
 
           <writeHost host="hostM" url="118.25.178.145:3306" user="root" password="123456" />
 
           <writeHost host="hostS" url="106.12.203.18:3306" user="root" password="123456" />
 
      </dataHost>
 
      <!-- 引數balance決定了哪些MySQL伺服器參與到讀SQL的負載均衡中 -->
 
		<!-- balance="0",為不開啟讀寫分離,所有讀操作都發送到當前可用的writeHost上-->
 
      <!-- balance="1",全部的readHost與stand by writeHost參與select語句的負載均衡-->
 
      <!-- balance="2",所有讀操作都隨機的在writeHost、readHost上分發-->
 
      <!-- MyCat1.4版本中,若想支援MySQL一主一從的標準配置,並且在主節點宕機的情況下,從節點還能讀取資料,則需要在MyCat裡配置為兩個writeHost並設定balance="1" -->
 
      <!-- writeType="0",所有寫操作都發送到可用的writeHost上 -->
 
      <!-- writeType="1",僅僅對於galera for mysql叢集這種多主多節點都能寫入的叢集起效,此時Mycat會隨機選擇一個writeHost並寫入資料,對於非galera for mysql叢集,請不要配置writeType=1,會導致資料庫不一致的嚴重問題 -->
 
</mycat:schema>

server.xml

在最底部配置可以連線到mycat的使用者資訊

    <user name="root">
		<property name="password">123456</property>
		<property name="schemas">realfake_schema1</property>
	</user>

	<user name="realfake">
		<property name="password">123456</property>
		<property name="schemas">realfake_schema1</property>
		<property name="readOnly">true</property>
	</user>

在開發階段配置log4j的日誌級別為debug

進入解壓目錄

cd conf/log4j.xml

修改‘info’為‘debug’

上線後改回

測試配置結果

進入解壓目錄,除錯模式啟動,關閉控制檯即停止服務

cd bin
./mycat console

 

也可

./mycat start
./mycat stop
./mycat restart

確認無錯後

使用navicat連線mycat

請確保伺服器防火牆已經開啟8066(連線mycat)和9066(監控mycat)埠

使用者名稱和密碼為server.xml配置的使用者資訊

原資料庫中的資料庫名為test

在經過mycat代理後變為我們在schema.xml配置的邏輯庫名

使用查詢語句

可以看到是從從mysql上讀取的資料

新增記錄

看到是從主mysql上進行資料更新

登入從mysql檢視資料是否更新到從mysql

配置成功。