天天看點

mycat學習(一) 使用mycat實作mysql讀寫分離

1.下載下傳mycat源碼

下載下傳位址:https://github.com/MyCATApache/Mycat-Server,我下載下傳的版本是1.7。

下載下傳完成後使用eclipse導入工程,并刷好maven。

2.mysql配置主從同步參考:https://blog.csdn.net/u011943534/article/details/87868939

3.配置resources/server.xml

其中

user

表示mycat的使用者名密碼,

schemas

表示mycat邏輯庫名稱,

readOnly

表示此使用者隻讀

<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
	<system>   
		<property name="useSqlStat">0</property>  <!-- 1為開啟實時統計、0為關閉 -->
	</system>
	
	<user name="root">
		<property name="password">123456</property>
		<property name="schemas">TESTDB</property>
	</user>

	<user name="user">
		<property name="password">user</property>
		<property name="schemas">TESTDB</property>
		<property name="readOnly">true</property>
	</user>

</mycat:server>
           

4.配置schema.xml

schema

說明:

name

與server.xml中schemas一緻

dataNode

該屬性用于綁定邏輯庫到某個具體的database上

dataNode

說明:

name

定義資料節點的名稱

dataHost

定義該分片屬于哪個資料庫執行個體

database

實際資料庫名稱

dataHost

說明:

balance

0 不讀寫分離,1全部的readHost與standbywriteHost參與select語句的負載均衡,簡單的說,當雙主雙從模式(M1->S1,M2->S2,并且M1與M2互為主備),正常情況下,M2,S1,S2都參與select語句的負載均衡。2所有讀操作都随機的在writeHost、readhost上分發。3所有讀請求随機的分發到wiriterHost對應的readhost執行,writerHost不負擔讀壓力,注意balance=3隻在1.4及其以後版本有,1.3沒有。

writeType

0所有寫操作發送到配置的第一個writeHost,第一個挂了切到還生存的第二個

writeHost,重新啟動後已切換後的為準,切換記錄在配置檔案中:dnindex.properties。2所有寫操作都随機的發送到配置的writeHost

switchType

-1表示不自動切換,1預設值,自動切換,2基于MySQL主從同步的狀态決定是否切換

心跳語句為showslavestatus,3基于MySQLgalarycluster的切換機制(适合叢集)

heatbeat

心跳的sql

writeHost

寫的實際資料庫配置

readHost

讀的實際資料庫配置

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

	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
	</schema>
	
	<dataNode name="dn1" dataHost="localhost1" database="test" />
	
	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM1" url="192.168.100.87:3306" user="root" password="ROOT_iscas123">
			<!-- can have multi read hosts -->
			<readHost host="hostS2" url="192.168.100.91:3306" user="root" password="ROOT_iscas123" />
		</writeHost>
		
	</dataHost>

</mycat:schema>
           

5.從

MycatStartup

類啟動

6.測試連接配接

public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.jdbc.Driver");
        Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.100.88:8066/TESTDB", "root", "123456");
        Statement statement = conn.createStatement();
        ResultSet resultSet = statement.executeQuery("select name from test1");
        while (resultSet.next()) {
            System.out.println(resultSet.getString("name"));
        }
        resultSet.close();
        statement.close();
        conn.close();
    }
           

7.MYCAT日志報Unknown charsetIndex:255錯誤

index_to_charset.properties

在配置檔案最後加入255=utf8mb4,重新開機服務即正常

繼續閱讀