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条数据,逻辑库/表,物理库/表结果:
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Flutter基础widgets教程-RaisedButton篇
- 记一次 excel vba 参考手册爬虫实战,不必要的一次爬虫。
- xray子域名扫描结果导出
- AWS的湖仓一体使用哪种数据湖格式进行衔接?
- python 行政区域地址标准化:业务经理填报的地址乱起八糟,高德接口有点厉害!
- python 行政区域地址标准化:业务经理填报的地址乱起八糟,高德接口有点厉害! -- 后续,使用分词思路完成解析
- pandas 一维台账数据与二维表格数据的转换
- Flutter基础widgets教程-Row篇
- padans 关于数据处理的杂谈 -- 时序数
- python pandas DataFrame 关于重复索引取值的一些坑
- selenium webdriver 如何添加cookie
- Flutter基础widgets教程-Scaffold篇
- python selenium 微信公众号历史文章随手一点就返回首页?郁闷之下只好将他们都下载下来。
- Flutter基础widgets教程-SimpleDialog篇
- python selenium 关于将网页打包为静态网页(mhtml)下载。