MyCat分库分表

分库方式

垂直分库

垂直分库根据业务进行划分,将同一类业务相关的数据表划分在同一个库中

水平分库

按照一定的规则对数据库进行划分,每个数据库总各个表结构相同, 数据存储在不同的数据库, 如根据年份划分不同的数据库

配置

配置server.xml

配置Mycat服务的端口和Mycat服务的用户

<!-- Mycat 服务端口8066  -->
<property name="serverPort">8066</property>
<!-- root用户 -->
<user name="root">
		<property name="password">123456</property>
		<property name="schemas">TESTDB</property>
	/user>
	<!-- 只读用户 -->
   <user name="test">
		<property name="password">test</property>
		<property name="schemas">TESTDB</property>
		<property name="readOnly">true</property>
	</user>

配置schema.xml

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

	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
		<!-- auto sharding by id (long) -->
		<!--<table name="travelrecord" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" />

		<!-- global table is auto cloned to all defined data nodes ,so can join
			with any table whose sharding node is in the same data node -->
		<!-- <table name="company" primaryKey="ID" type="global" dataNode="dn1,dn2,dn3" /> -->
		<!-- <table name="goods" primaryKey="ID" type="global" dataNode="dn1,dn2" /> -->
		<!-- random sharding using mod sharind rule -->
		<!-- <table name="hotnews" primaryKey="ID" autoIncrement="true" dataNode="dn1,dn2,dn3" -->
			   <!-- rule="mod-long" /> -->
		<!-- <table name="dual" primaryKey="ID" dataNode="dnx,dnoracle2" type="global"
			needAddLimit="false"/> <table name="worker" primaryKey="ID" dataNode="jdbc_dn1,jdbc_dn2,jdbc_dn3"
			rule="mod-long" /> -->
		<!-- <table name="employee" primaryKey="ID" dataNode="dn1,dn2" -->
			  <!-- rule="sharding-by-intfile" /> -->
		<!-- <table name="customer" primaryKey="ID" dataNode="dn1,dn2" -->
			   <!--  rule="sharding-by-intfile"> -->
			<!-- <childTable name="orders" primaryKey="ID" joinKey="customer_id" -->
					<!--	parentKey="id"> -->
				<!--< <childTable name="order_items" joinKey="order_id" -->
						<!--	parentKey="id" /> -->
			<!-- </childTable> -->
			<!-- <childTable name="customer_addr" primaryKey="ID" joinKey="customer_id" -->
					<!--	parentKey="id" /> ->
		<!-- </table> -->
		<!-- <table name="oc_call" primaryKey="ID" dataNode="dn1$0-743" rule="latest-month-calldate"
			/> -->
			<!-- customer表不分库不分表 -->
			<table name="customer" dataNode="dn1" />
			<!-- item 进行分库操作, 分库规则为mod-long -->
			<table name="item" primaryKey="ID" dataNode="dn1,dn2,dn3" rule="mod-long" />
			<!-- customer_order 使用Mycat进行分表操作, 分表规则为mod-long, customer_order 分表为customer_order1, customer_order2, customer_order3 -->
			<table name="customer_order" primaryKey="ID" subTables="customer_order$1-3" dataNode="dn3" rule="mod-long"/>
	</schema>
	<!-- <dataNode name="dn1$0-743" dataHost="localhost1" database="db$0-743"
		/> -->
		
	<dataNode name="dn1" dataHost="localhost" database="mycat01" />
	<dataNode name="dn2" dataHost="localhost" database="mycat02" />
	<dataNode name="dn3" dataHost="localhost" database="mycat03" />
	<!--<dataNode name="dn4" dataHost="sequoiadb1" database="SAMPLE" />
	 <dataNode name="jdbc_dn1" dataHost="jdbchost" database="db1" />
	<dataNode	name="jdbc_dn2" dataHost="jdbchost" database="db2" />
	<dataNode name="jdbc_dn3" 	dataHost="jdbchost" database="db3" /> -->
	<!-- 配置数据库连接 -->
	<dataHost name="localhost" maxCon="1000" minCon="10" balance="0"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM1" url="localhost:3306" user="root"
				   password="sheep1993">
			<!-- can have multi read hosts -->
			<readHost host="hostS2" url="localhost:3306" user="root" password="sheep1993" />
		</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>

配置rule.xml

除mod-long规则以外,还可以配置其他规则

<tableRule name="mod-long">
	<rule>
		<columns>id</columns>
		<algorithm>mod-long</algorithm>
	</rule>
</tableRule>
<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
		<!-- how many data nodes -->
	<property name="count">3</property>
</function>

启动

./mycat start

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值