mycat分片测试

时间:2019-02-21
本文章向大家介绍mycat分片测试,主要包括mycat分片测试使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

这里测试下mycat的分表分库!

1.搭建mycat、mysql环境

mycat用jdk7基础镜像,mysql用5.7.18,这里使用docker比较方便,镜像如下:

mysql初始脚本:

启动mysql
service mysql start
进入客户端
mysql -u root
改密、允许远程连接、使用密码登录
mysql>use mysql;
mysql>select host,user,authentication_string,plugin from user where user='root';
mysql>update user set host='%' where user='root';//允许远程连接
mysql>update user set plugin='mysql_native_password' where user='root';//用密码登录
mysql>update user set authentication_string='123456' where user='root';//修改密码(在前面两个之后修改)
mysql>flush privileges;

2.mycat配置文件

先一台mysql实例上开两个数据库order_1和order_2,都有一个order_tb,将插入的数据平均分片到两个库的order_tb中

  • server.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<!--数据库实例DBI 有库order_1和order_2,下面都有order表,将数据分片到这两个表中-->
	<!--schema配置逻辑库-->
	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
		<!--table配置要分片的表-->
		<table name="order_tb" primaryKey="id" dataNode="node1,node2" rule="rule2"/>
	</schema>
	<!--DBI上的order_1库-->
	<dataNode name="node1" dataHost="DBI" database="order_1" />
	<!--DBI上的order_2库-->
	<dataNode name="node2" dataHost="DBI" database="order_2" />
	<!--物理数据库实例-->
	<dataHost name="DBI" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user();</heartbeat>
		<writeHost host="master" url="118.24.9.149:3306" user="root" password="">
		</writeHost>
	</dataHost>
</mycat:schema>
  • rule.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:rule SYSTEM "rule.dtd">
<mycat:rule xmlns:mycat="http://io.mycat/">
	<!--规则1-->
	<tableRule name="rule1">
		<rule>
			<!--分片参照列-->
			<columns>id</columns>
			<!--分片函数-->
			<algorithm>hash</algorithm>
		</rule>
	</tableRule>
	<!--count(2,1) length(256,512)-->
	<!--库(1)--><!--保存256条 id:0~255-->
	<!--库(2)--><!--保存256条 id:256~511-->
	<!--库(3)--><!--保存512条 id:512~1024-->
	<!--count(8) length(128)-->
	<!--库(1)--><!--保存128条 0~127-->		<!--保存128条 1025~1152-->
	<!--库(2)--><!--保存128条 128~255-->	<!--保存128条 1153~1280-->
	<!--库(3)--><!--保存128条 256~383-->	<!--保存128条 1281~1408-->
	<!--库(4)--><!--保存128条 384~511-->	<!--保存128条 1409~1536-->
	<!--库(5)--><!--保存128条 512~639-->	<!--保存128条 1537~1664-->
	<!--库(6)--><!--保存128条 640~767-->	<!--保存128条 1665~1792-->
	<!--库(7)--><!--保存128条 768~895-->	<!--保存128条 1793~1920-->
	<!--库(8)--><!--保存128条 896~1024-->	<!--保存128条 1921~2048-->
	<!--规则2-->
	<tableRule name="rule2">
		<rule>
			<!--分片参照列-->
			<columns>id</columns>
			<!--分片函数-->
			<algorithm>mod-long</algorithm>
		</rule>
	</tableRule>
	<!--固定分片hash算法-->
	<function name="hash" class="io.mycat.route.function.PartitionByLong">
		<!--分片个数(数组)-->
		<property name="partitionCount">1,1</property>
		<!--分片范围(数组)-->
		<property name="partitionLength">512,512</property>
		<!--1024 = sum((count[i]*length[i]))-->
	</function>
	<!--模2分片算法-->
	<function name="mod-long" class="io.mycat.route.function.PartitionByMod">
		<!--分片个数(数组)-->
		<property name="count">2</property>
	</function>
</mycat:rule>
  • schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
	<!--数据库实例DBI 有库order_1和order_2,下面都有order表,将数据分片到这两个表中-->
	<!--schema配置逻辑库-->
	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
		<!--table配置要分片的表-->
		<table name="order_tb" primaryKey="id" dataNode="node1,node2" rule="rule2"/>
	</schema>
	<!--DBI上的order_1库-->
	<dataNode name="node1" dataHost="DBI" database="order_1" />
	<!--DBI上的order_2库-->
	<dataNode name="node2" dataHost="DBI" database="order_2" />
	<!--物理数据库实例-->
	<dataHost name="DBI" maxCon="1000" minCon="10" balance="0" writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user();</heartbeat>
		<writeHost host="master" url="118.24.9.149:3306" user="root" password="">
		</writeHost>
	</dataHost>
</mycat:schema>

3.启动mycat

./mycat start 即可

这里测试机器内存很小,所以修改启动参数用sh脚本启动

startup_nowrap.sh:

JAVA_OPTS="-server -Xms64M -Xmx512M -XX:MaxPermSize=64M  -XX:+AggressiveOpts -XX:MaxDirectMemorySize=512M"

4.测试

插入10条数据,逻辑库/表,物理库/表结果: