MYSQ主從複製(一主兩從)+mycat讀寫分離

在MySQL中間件出現之前,對於MySQL主從集羣,如果要實現其讀寫分離,一般是在程序端實現,這樣就帶來一個問題,即數據庫和程序的耦合度太高,如果我數據庫的地址發生改變了,那麼我程序端也要進行相應的修改,如果數據庫不小心掛掉了,則同時也意味着程序的不可用,而這對很多應用來說,並不能接受。

在這裏,我用三個實例組成MySQL主從集羣,來驗證MyCAT的讀寫分離功能。

Mysql主從複製:

https://blog.csdn.net/qq_16171815/article/details/96300490

Mycat讀寫分離

1、下載mycat

官網下載地址:http://www.mycat.org.cn/

下載完之後,解壓到本地

2、配置文件

進入到conf文件夾,配置schema.xml,server.xml兩個文件

打開schema.xml文件,去掉一些繁雜的配置,讀寫分離只需要下列配置:

<?xml version="1.0"?>

<!DOCTYPE mycat:schema SYSTEM "schema.dtd">

<mycat:schema xmlns:mycat="http://io.mycat/">

		<!--【name】屬性:mycat實例,與server.xml配置相同-->
        <schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
		<!--【database】屬性:真實的數據庫-->
        <dataNode name="dn1" dataHost="localhost1" database="mycat_test" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
			writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
           <heartbeat>select user()</heartbeat><!--mycat的心跳-->
		   <writeHost host="hostM1" url="127.0.0.1:3306" user="root" password="root"><!--寫服務器篇配置-->
				<readHost host="hostS1" url="192.168.127.129:3306" user="root" password="root" /><!--讀服務器篇配置-->
				<readHost host="hostS2" url="192.168.127.130:3306" user="root" password="root" /><!--讀服務器篇配置-->
           </writeHost>
        </dataHost>

</mycat:schema>

打開server.xml,去掉一些繁雜的配置,讀寫分離只需要下列配置:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">

<mycat:server xmlns:mycat="http://io.mycat/">

        <system>
        <property name="useSqlStat">1</property>  <!-- 1爲開啓實時統計、0爲關閉 -->
        </system>
		<!--mycat用戶節點,schema要與schema.xml一致-->
        <user name="mycat">
                <property name="password">mycat</property>
                <property name="schemas">TESTDB</property>
        </user>

        <user name="read">
                <property name="password">read</property>
                <property name="schemas">TESTDB</property>
				<property name="readOnly">true</property><!--是否只讀-->
        </user>
</mycat:server>

3、啓動mycat

進入到bin目錄下,進入窗口模式,

先install mycat:mycat.bat install

啓動mycat:mycat.bat start

其他命令

重啓:mycat.bat restart

停止:mycat.bat stop

 

4、驗證mycat讀寫分離

通過mysql連接工具,我這裏是sqlyog,連接mycat,用戶名和密碼就是剛纔server.xml文件配置的

 連接成功之後,會發現有一個數據庫實例,和一張表,TESTDB就是server.xml和schema.xml配置相同的地方

剛好和需要讀寫分離的庫吻合

我們現將mysql主從複製的表中數據都刪除

說明:主服務器是本機(localhost),兩個從機分別是(192.168.127.129和192.168.127.130)

mycat中也沒有數據

下面通過mycat插入數據

插入成功,看下數據,一主兩從都有數據

因爲是主從複製,只有通過主服務器插入數據,從服務器纔有更新數據,所以肯定是寫是在主服務器

下面驗證讀,我們在兩個從服務器中各插入一條數據,這樣主服務器是不會更新數據的

可以看到讀出來的數據,和主庫數據不同

5、問題總結

搭建的過程中,遇到各種問題,絕大部分都是server.xml和schema.xml文件配置錯誤,這兩個文件的配置網上很多,這裏不做敘述,各個節點的解釋和含義,網上也很多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章