MySql Mycat 讀寫分離 主備 主從 分庫查詢

讀寫分離要做的事情就是對於一條SQL該選擇哪個數據庫去執行,至於誰來做選擇數據庫這件事兒,無非兩個,要麼中間件幫我們做,要麼程序自己做。下面就來講講利用maycat中間件實現

Mycat數據庫分庫分表中間件 簡介
阿里大牛開發的開源免費產品,面向企業應用開發的大數據庫集羣 ;核心技術即使分表分片,我們不用在代碼中配置很多數據源,只需要在mycat中就可以,增加節點很靈活,降低了和代碼的耦合度;同時,這也是對分佈式的數據庫的支持,支持事務。
可以把mycat看作一個代理,根據負載均衡策略實現這樣的分佈式數據。

                     
更多詳細的介紹請看官網:http://www.mycat.io/
官網文檔電子書:http://www.mycat.io/document/mycat-definitive-guide.pdf

 

主備配置方式:https://blog.csdn.net/c237821375/article/details/105529568

主從配置方式:https://blog.csdn.net/c237821375/article/details/105292036

一、 mycat安裝
官網下載1.6版本的解壓,據說這個比較穩定,目錄如下:

目錄 說明
bin mycat命令,啓動、重啓、停止等
catlet     mycatlet爲Mycat的一個擴展功能
conf     mycatlet爲Mycat的一個擴展功能
lib     Mycat 配置信息,重點關注
logs     日誌文件,包括Mycat啓動的日誌和運行的日誌


我們所有的配置都在conf下,重點時這三個文件

文件     說明
server.xml Mycat的配置文件,設置賬號、參數等
schema.xml Mycat對應的物理數據庫和數據庫表的配置
rule.xml Mycat分片(分庫分表)規則

二、設置配置文件

1、配置server.xml

 

這裏注意:<property name="schemas">mycatDatabase</property>

2、配置schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

	<schema name="mycatDatabase" checkSQLschema="false" sqlMaxLimit="100" >
		<table name="student" dataNode="dn1"></table>
		<table name="security_guard" dataNode="dn2"></table>
		<table name="teacher" dataNode="dn2"></table>
	</schema>
	<!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
		/> -->
	<!-- 數據庫 school -->
	<dataNode name="dn1" dataHost="MydataHost" database="school" />

	<!-- 數據庫 人員 -->
	<dataNode name="dn2" dataHost="MydataHost1" database="staff_record" />

	<dataHost name="MydataHost" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>show status like 'wsrep%'</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="severMast1" url="localhost:3318" user="root" password="root">   				
		</writeHost>
		<writeHost host="severMast2" url="localhost:3328" user="root" password="root">   				
		</writeHost>
		<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
	</dataHost>

	<dataHost name="MydataHost1" maxCon="1000" minCon="10" balance="2"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="3"  slaveThreshold="100">
		<heartbeat>show status like 'wsrep%'</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="severMast" url="localhost:3308" user="root" password="root">  
			<readHost host="severSlave1" url="localhost:3309" user="root" password="root"/>  
			<readHost host="severSlave2" url="localhost:3310" user="root" password="root"/>   				
		</writeHost>
		<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
	</dataHost>
	<!--
		<dataHost name="sequoiadb1" maxCon="1000" minCon="1" balance="0" dbType="sequoiadb" dbDriver="jdbc">
		<heartbeat> 		</heartbeat>
		 <writeHost host="hostM1" url="sequoiadb://1426587161.dbaas.sequoialab.net:11920/SAMPLE" user="jifeng" 	password="jifeng"></writeHost>
		 </dataHost>

	  <dataHost name="oracle1" maxCon="1000" minCon="1" balance="0" writeType="0" 	dbType="oracle" dbDriver="jdbc"> <heartbeat>select 1 from dual</heartbeat>
		<connectionInitSql>alter session set nls_date_format='yyyy-mm-dd hh24:mi:ss'</connectionInitSql>
		<writeHost host="hostM1" url="jdbc:oracle:thin:@127.0.0.1:1521:nange" user="base" 	password="123456" > </writeHost> </dataHost>

		<dataHost name="jdbchost" maxCon="1000" 	minCon="1" balance="0" writeType="0" dbType="mongodb" dbDriver="jdbc">
		<heartbeat>select 	user()</heartbeat>
		<writeHost host="hostM" url="mongodb://192.168.0.99/test" user="admin" password="123456" ></writeHost> </dataHost>

		<dataHost name="sparksql" maxCon="1000" minCon="1" balance="0" dbType="spark" dbDriver="jdbc">
		<heartbeat> </heartbeat>
		 <writeHost host="hostM1" url="jdbc:hive2://feng01:10000" user="jifeng" 	password="jifeng"></writeHost> </dataHost> -->

	<!-- <dataHost name="jdbchost" maxCon="1000" minCon="10" balance="0" dbType="mysql"
		dbDriver="jdbc"> <heartbeat>select user()</heartbeat> <writeHost host="hostM1"
		url="jdbc:mysql://localhost:3306" user="root" password="123456"> </writeHost>
		</dataHost> -->
</mycat:schema>

數據庫展示


 

三、運行與測試

運行mycat          startup_nowrap.bat

mycat默認端口:8066

使用server.xml裏配置的賬號鏈接

最後中間件的到數據庫mycatDatabase

如此就能直接在myacat裏連表查詢,完成了分庫關聯

4、個人建議

要完成更復雜的分庫分表需要更靈活的配置

個人建議認真閱讀官方給出的pdf,裏面有很多配置技巧,例如以下說明

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