原文:https://dwz.cn/55KN8AA0
作者:波波烤鴨
一、讀寫分離配置
前面我們已經介紹過了MySQL的主從同步和mycat的安裝及相關配置文件的介紹,現在我們來配置下具體的讀寫分離操作。
1.1 創建物理表
我們現在master庫中創建一張t_user表,因為主從的關系,slave中也會同步創建該表
1.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"> <table name="t_user" primaryKey="ID" type="global" dataNode="dn1" /> </schema> <dataNode name="dn1" dataHost="localhost1" database="demo1" /> <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100"> <heartbeat>select user()‘’</heartbeat> <writeHost host="hostM1" url="192.168.88.180:3306" user="root" password="123456"> <readHost host="hostS2" url="192.168.88.181:3306" user="root" password="123456" /> </writeHost> </dataHost> </mycat:schema>
注意:
- schema中的name TESTDB 沒變
- table中的是邏輯表的名稱,所以和物理表同名’t_user’
- dataNode中的database表示的是物理數據庫名稱demo1
- balance的值要設置為1否則查詢會讀取不到從庫的數據
- writeHost中的url表示寫庫的地址
- readHost表示配置讀庫的信息
- user屬性對應的應該是server.xml中配置的賬號
balance的值描述0不開啟讀寫分離機制,所有讀操作都發送到當前可用的 writeHost 上1全部的 readHost 與 stand by writeHost(分庫中沒有參與寫操作的) 參與 select 語句的負載均衡2所有讀操作都隨機的在 writeHost、 readhost 上分發。3所有讀請求隨機的分發到 writeHost 對應的 readhost 執行,writerHost 不負擔讀壓力
1.3 server.xml配置
本案例中server.xml文件不需要修改,如果在schema.xml中中將TESTDB修改了那么在server.xml文件中對應的也需要修改
1.4 rule.xml配置
在讀寫分離中不需要修改rule.xml文件
二、MyCat啟動 通過前面的介紹我們已經安裝好了MyCat,現在我們先啟動MyCat,MyCat的啟動腳本位于bin目錄下,常用的命令
操作命令啟動./bin/mycat start停止./bin/mycat stop重啟./bin/mycat restart查詢狀態./bin/mycat status
三、測試讀寫分離
3.1 客戶端連接MyCat
我們可以通過客戶端來連接MyCat操作,客戶端可以是Navicat或者DataGrip,本文通過Navicat來連接,注意連接的端口為8066
3.2 寫數據測試
我們通過mycat連接來執行insert語句,來查看是否會寫入到物理庫中。
如上,通過對MyCat的邏輯庫的寫操作,真實的寫入到了物理庫中。
3.3 讀數據測試
接下來我們看下讀操作,為了演示讀操作,我們直接在slave中手動插入一條數據,這樣主庫和從庫中的數據就不一樣了,這時我們通過MyCat來查詢數據,通過查詢的結果就能判斷出查詢的數據到底是哪個庫的數據了。具體操作如下:
通過上面的演示驗證了我們通過MyCat配置的讀寫分離是成功的!