mycat簡單安裝和配置,mysql分庫庫表

前言

說明

最近從同事那邊瞭解到一些數據庫主從讀寫分離,分片的工具。叫mycat。然後就寫下這篇入門博客簡單的說一下和mycat有關的內容吧。

準備

mysql5.7。安裝2個,做好主從配置。如果不會可以參照我之前的文章docker安裝mysql以及主從配置
mycat下載。從mycat官網,上面有本mycat權威指南挺好用的

1.mycat的簡短介紹

我使用mycat的原因是它對於代碼的沒有侵入,相比大家也都看過java的一些主從分離和分片的方案,就是配置多數據源,到用到主庫的時候,就調用主庫的連接。需要用到從庫的時候,就調用從庫的連接。
但是使用mycat之後,他相當於給數據庫外面再做一層。你每次調用sql語句,等於先到mycat中,mycat再分發到需要操作的數據庫中。
例如,一個表根據id分成了10個表。但是實際上在程序員看來,需要寫的代碼並不需要變化。還是操作一個表。只不過是配置好的mycat的邏輯表,它會給你分發到對應物理表中。

2.mycat的配置說明

mycat的主要配置其實就在於3(或者說4)個文件的配置
分別是:
server.xml
說明:mycat最基本的配置,配置連接的數據庫和用戶
schema.xml
說明:mycat中邏輯表的具體配置
rule.xml
說明:
mycat中邏輯表需要分片的分片規則的配置文件
以及一個具體的分片規則txt文件。我這邊命名爲chen.txt

3.表格建立

注意開啓主從後這些操作只要在主庫進行就可以,從庫會自動同步
創一張不需要分片的數據庫test,然後創一張表做例子

CREATE TABLE `test`.`test1`( `id` INT UNSIGNED NOT NULL AUTO_INCREMENT, `name` VARCHAR(20), PRIMARY KEY (`id`) );

然後創建需要分片的表的數據庫,創建10個數據庫,分別是db1-db10。做分片表的數據庫位置。

4.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="defaultSqlParser">druidparser</property>
		<!--需要配置的端口號-->
		<property name="serverPort">8066</property>
	</system>
	<user name="master">
	<!--name就是登錄名,password就是密碼,schemas就是對應的schema.xml裏面的邏輯庫,就是schemal標籤裏面的name,注意這個name要和數據庫中的庫名相同,readOnly就是開啓只讀-->
		<property name="password">mycat</property>
		<property name="schemas">test</property>
	</user>
	<user name="read">
		<property name="password">mycat</property>
		<property name="schemas">test</property>
		<property name="readOnly">true</property>
	</user>
</mycat:server>

5.schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <schema name="test" checkSQLschema="false" sqlMaxLimit="100" dataNode="test">
		<!--不需要分片的表直接用test處理-->
		<!--注意,name要和邏輯庫中的名字相同,dadaNode對應配置,schema name就是service配置文件中需要對應的用戶所操作的數據庫-->
		<!--需要分片的表的配置-->
			<table name="test2" dataNode="dn$1-10" rule="chen" />
        </schema>
        <dataNode name="test" dataHost="dh1" database="test"></dataNode>
		<!--需要配置需要分片的表-->
		<dataNode name="dn1" dataHost="dh1" database="db1" />
		<dataNode name="dn2" dataHost="dh1" database="db2" />
		<dataNode name="dn3" dataHost="dh1" database="db3" />
		<dataNode name="dn4" dataHost="dh1" database="db4" />
		<dataNode name="dn5" dataHost="dh1" database="db5" />
		<dataNode name="dn6" dataHost="dh1" database="db6" />
		<dataNode name="dn7" dataHost="dh1" database="db7" />
		<dataNode name="dn8" dataHost="dh1" database="db8" />
		<dataNode name="dn9" dataHost="dh1" database="db9" />
		<dataNode name="dn10" dataHost="dh1" database="db10" />
		<!--dataHost就是具體要連接的數據庫的,dataBase就是具體的數據庫名-->
        <dataHost name="dh1" maxCon="1000" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
				<!--用於驗證心跳,這個是mysql主庫的配置-->
                <writeHost host="hostM1" url="ip:3306" user="root" password="password">
				<!--具體物理庫mysql從庫的配置-->
				<readHost host="hostS1" url="ip:3307" user="root" password="password">
                </readHost>
                </writeHost>
        </dataHost>
</mycat:schema>

6.rule.xml

添加

	<tableRule name="chen">
		<rule>
			<columns>id</columns>
			<algorithm>chen-test</algorithm>
		</rule>
	</tableRule>
	<!--schema.xml中配置的rule="chen"所對應的規則,規則對應主鍵,列名爲id-->
	<function name="chen-test"
		class="io.mycat.route.function.AutoPartitionByLong">
		<property name="mapFile">chen.txt</property>
		<!--在conf中需要添加的txt規則文件-->
	</function>

7.chen.txt

0-10=0
10-20=1
20-30=2
30-40=3
40-50=4
50-60=5
60-70=6
70-80=7
80-90=8
90-100=9

表示主鍵id爲0-10的在db1,11-20的在表bd2操作

8.開啓服務

win系統,打開bin/startup_nowrap.bat這個文件,提示mycat server startup successfully。
表示啓動成功

9.連接mycat,測試數據庫操作

打開數據庫工具,我用的是sqlyog,配置是locathost/mycat/mycat/8066
然後就可以看到之前創建好的test庫中的test表了,然後對test進行相應操作就可以
然後我們需要創建需要分片的表

CREATE TABLE `test2` ( `id` BIGINT(20) NOT NULL, `name` VARCHAR(100) DEFAULT NULL, `date` DATE DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8mb4; 
INSERT INTO test2 (`id`, `name`, `date`) VALUES ('10', '2', '2018-05-28')#插入測試數據
SELECT * FROM test2

創建test2表的時候可以看到,db1-10中,都創建了表test2
然後通過sqlyog連接實際的數據庫,發現如果插入對應的數據的時候,1-10會被mycat插入到db1中,11-20會被插入到db2中,以此類推
其次就是查詢。mycat會自動把分片表中的數據整合在一起顯示出來。這樣mycat的配置就算完畢了。
然後在讀寫分離這邊。可以試着關閉主庫,進行讀操作(select),發現操作都去了從庫。關閉從庫,進行寫操作(delete,update,inser),發現操作都去了主庫。

關於mycat-eye

只需要配置安裝好一個zookeeper,已經在網頁中對數據庫做好相應的連接配置即可。非常簡單,就不多敘述了。

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