1. 程式人生 > >Mycat跨資料庫配置使用

Mycat跨資料庫配置使用

需要的配置如下:

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

	<!-- 邏輯庫的配置 -->
	<schema name="win_test" checkSQLschema="false" dataNode="dn_test">
		<table name="user" primaryKey="ID" dataNode="dn_test_01,dn_test_02,dn_test_03" rule="sharding-by-test">
    <!--  <childTable name="course" primaryKey="ID" joinKey="id"
        parentKey="id">
      </childTable> 
      -->
    </table>
	</schema>
	
	<!-- 資料節點配置 -->
  <dataNode name="dn_test" dataHost="dh_test" database="trc_test_db" />
  
  <!-- 可以配置主從庫 -->
	<dataNode name="dn_test_01" dataHost="dh_test1" database="test_01" />
  <dataNode name="dn_test_02" dataHost="dh_test1" database="test_02" />
  <dataNode name="dn_test_03" dataHost="dh_test1" database="test_03" />
	
  <!-- 叢集地址配置,可以在此新增需要加入mycat中的資料庫安裝的伺服器地址 -->
  <dataHost name="dh_test" maxCon="1000" minCon="10" balance="0"
    writeType="0" dbType="mysql" dbDriver="native" switchType="-1"
    slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <writeHost host="host_test" url="127.0.0.1:3306" user="root"
      password="qq123456789">
    </writeHost>
  </dataHost>
  
  <!-- 主從可以配置讀寫分離 -->
  <dataHost name="dh_test1" maxCon="1000" minCon="10" balance="0"
    writeType="0" dbType="mysql" dbDriver="native" switchType="-1"
    slaveThreshold="100">
    <heartbeat>select user()</heartbeat>
    <writeHost host="host_test1" url="127.0.0.1:3306" user="root"
      password="qq123456789">
    </writeHost>
  </dataHost>
  
</mycat:schema>
schema.xml配置 上面對從資料庫進行了從庫分片,所以需要對配置分片策略,對應於rule.xml檔案
<tableRule name="sharding-by-test">
    <rule>
      <columns>id</columns>
      <algorithm>user</algorithm>
    </rule>
  </tableRule>
    <function name="test"
    class="org.opencloudb.route.function.PartitionByMurmurHash">
    <property name="seed">0</property><!-- 預設是0 -->
    <property name="count">10</property><!-- 要分片的資料庫節點數量,必須指定,否則沒法分片 -->
    <property name="virtualBucketTimes">160</property><!-- 一個實際的資料庫節點被對映為這麼多虛擬節點,預設是160倍,也就是虛擬節點數是物理節點數的160倍 -->
    <!-- <property name="weightMapFile">weightMapFile</property> 節點的權重,沒有指定權重的節點預設是1。以properties檔案的格式填寫,以從0開始到count-1的整數值也就是節點索引為key,以節點權重值為值。所有權重值必須是正整數,否則以1代替 -->
    <!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property> 
      用於測試時觀察各物理節點與虛擬節點的分佈情況,如果指定了這個屬性,會把虛擬節點的murmur hash值與物理節點的對映按行輸出到這個檔案,沒有預設值,如果不指定,就不會輸出任何東西 -->
  </function>

rule.xml配置

本配置只是簡單配置了分片,可以根據自身的需求來採用更加靈活的分片策略

需要對mycat進行安全設定,需要對使用者進行訪問安全控制,修改檔案是server.xml

  <property name="charset">utf8</property>
	<property name="defaultSqlParser">druidparser</property>
      <!--  <property name="useCompression">1</property>--> <!--1為開啟mysql壓縮協議-->
	<!-- <property name="processorBufferChunk">40960</property> -->
	<!-- 
	<property name="processors">1</property> 
	<property name="processorExecutor">32</property> 
	 -->
		<!--預設是65535 64K 用於sql解析時最大文字長度 -->
		<!--<property name="maxStringLiteralLength">65535</property>-->
		<!--<property name="sequnceHandlerType">0</property>-->
		<!--<property name="backSocketNoDelay">1</property>-->
		<!--<property name="frontSocketNoDelay">1</property>-->
		<!--<property name="processorExecutor">16</property>-->
		<!-- 
			<property name="mutiNodeLimitType">1</property> 0:開啟小數量級(預設) ;1:開啟億級資料排序
	    	<property name="mutiNodePatchSize">100</property> 億級數量排序批量
			<property name="processors">32</property> <property name="processorExecutor">32</property> 
			<property name="serverPort">8066</property> <property name="managerPort">9066</property> 
			<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> 
			<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
	</system>
	<user name="root">
		<property name="password">xxxxxx</property>
		<property name="schemas">win_test,win_test1</property>
	</user>
server.xml配置 一個使用者名稱只能對應一個<user></user>,如果需要兼用一個使用者訪問多個邏輯庫,可以用逗號隔開來控制。

如有同學有更深的理解或者想理解更多,歡迎交流