使用MyCat中介軟體代理MySql讀寫分離
阿新 • • 發佈:2018-12-15
其前提條件:
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
配置成功。