首先说一下为什么选择MyCat,mysql分表分库的工具还有sharding-jdbc,是jar包的形式集成到项目的,可以相对灵活的配置自定义分片策略(PS:其实大部分业务场景是分片策略越简单越好啊,不会搞那么复杂也不需要太灵活,要不然扩容很麻烦),从架构上考虑感觉不太灵活,依赖与项目,性能负载都是跟项目走的,因为需要维护大量的数据源,感觉更适合小项目,但是它的有点就是已经收录了apache,应该是更成熟稳定(MyCat亲测是有些小问题的,包括隐藏Bug什么的),不过ShardingSphere也中间件,支持mysql,后面因为项目要求开源框架使用MyCat,所以转到MyCat中来了。

总结注意事项:1.分片键尽量耦合聚集,多表join需要相关的join表on关联的字段数据集中在一起,比如a left b on a.id=b.aid,那么a表按照a分片,b表按照aid分片,那么相关连的数据总是会落在一个节点上,否则存在跨库join,全表路由单节点匹配不到数据。

.....

最开始用1.6.7.4因为习惯性看到这个版本后面是稳定发布版本,1.6.7.5是-test版本,不过还是转移到MyCat1.6.7.5(1.6.7.4发现有问题,1.部分mysql客户端多刷几次会报错,2.select * from a where a.id in (select id from b))这种in子查询会偶发性数据不完整,有时候出来一条数据,有时候是正常的,很恼火,1.6.7.5上面没有这个问题,感兴趣的同学可以自己下载源码编译打包,最新的源码缺少的文件可以参考:

public class StatusFlags {
public static int SERVER_MORE_RESULTS_EXISTS = 0x0008;
}

MyCat是中间件,伪装的mysql服务器,因此应用端这边除了复杂的sql改造,其它不需要动,MyCat也相对简单,直接配置好,运行脚本即可,重要的几个配置文件是:schema.xml/rule.xml/server.xml,可以参考官方指南。

schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!--dataNode:没有配置的表则会走默认节点;其它属性参见文档-->
<schema name="medicaredb" checkSQLschema="true" sqlMaxLimit="100" dataNode="medicare">
<!--分片表-一致性HASH-->
<table name="t_person,..." dataNode="medicareDn1$1-32" rule="sharding-person_id-murmur"/>
<!--全局表-->
<table name="t_device,..." type="global" dataNode="medicareDn1$1-32,medicare" />
<!--压力测试分片表-->
<table name="travelrecord" dataNode="medicareDn1$1-32" rule="sharding-id-murmur"/>
</schema>
<dataNode name="medicare" dataHost="aloneDataBase" database="medicare" />
<dataNode name="medicareDn1$1-32" dataHost="cutDataBaseDn1" database="medicare_$1-32" /> <dataHost name="aloneDataBase" maxCon="100" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="192.168.10.122:3306" user="root"
password="123456">
</writeHost>
</dataHost>
<!-- maxCon=3250解释一下,数据库设置了最大3300,32个数据库,压力测试每个库100线程压,就需要3200,留下50个给程序或其它调试工具用,要不然压测过程会有抢占 -->
<dataHost name="cutDataBaseDn1" maxCon="3250" minCon="100" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM2" url="192.168.16.147:3306" user="root"
password="123456">
</writeHost>
</dataHost>
</mycat:schema>
maxCon的设置是参考了对应的mycat-nettool自带的压力测试工具

MyCat中间件的坑的更多相关文章

  1. Mycat 中间件配置初探与入门操作

    Mycat中间件配置初探与入门操作 By:授客 QQ:1033553122 实践环境 Mycat-server-1.5.1-RELEASE-20161130213509-win.tar.gz 下载地址 ...

  2. 高可用Mysql架构_Mysql主从复制、Mysql双主热备、Mysql双主双从、Mysql读写分离(Mycat中间件)、Mysql分库分表架构(Mycat中间件)的演变

    [Mysql主从复制]解决的问题数据分布:比如一共150台机器,分别往电信.网通.移动各放50台,这样无论在哪个网络访问都很快.其次按照地域,比如国内国外,北方南方,这样地域性访问解决了.负载均衡:M ...

  3. MyCat中间件:读写分离(转)

    利用MyCat中间件实现读写分离 需要两步: 1.搭建MySQL主从复制环境 2.配置MyCat读写分离策略 一.搭建MySQL主从环境 参考上一篇博文:MySQL系列之七:主从复制 二.配置MyCa ...

  4. mysql mycat 中间件安装与使用

    一,什么是mycat 一个彻底开源的,面向企业应用开发的大数据库集群 支持事务.ACID.可以替代MySQL的加强版数据库 一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群 一 ...

  5. .NET Core 从1.1升级到2.0记录(Cookie中间件踩坑)

    .NET Core 2.0 新时代 万众瞩目的.NET Core 2.0终于发布了,原定于9.19的dotnetconf大会的发布时间大大提前了1个月,.NET Core 2.0/.NET Stand ...

  6. Mycat中间件

    数据库中间件Mycat自我介绍 一.mycat概述 1.功能介绍 mycat一个开源的分布式数据库系统,是一个实现了mysql协议的server前端用户可以把它看成一个数据库代理,用mysql客户端工 ...

  7. CentOS7安装MYCAT中间件

    MYCAT是一个被广泛使用的功能强大的开源的数据库中间件,当然他的理想不仅仅是做一个中间件.这篇文章主要记录MYCAT服务的搭建过程,下篇会继续更新MYCAT的使用配置. 本篇记录将使用CentOS7 ...

  8. mycat中间件--schema.xml配置文件详解

    schema.xml管理着MyCat的逻辑库.表.分片规则.DataNode以及DataSource.弄懂这些配置,是正确使用MyCat的前提. <?xml version="1.0& ...

  9. mycat中间件--linux安装mycat1.6版本

    一.mycat安装前准备1.mycat下载地址,点击此处进行下载2.环境要求如下: mycat使用Java开发,因为用到了JDK 7的部分功能,所以在使用前请确保安装了JDK 7.0,并设置了正确的J ...

  10. mycat中间件安装与使用

    前提: 安装JDK版本在7.0及其以上 1.下载: 下载地址在:http://dl.mycat.io/ 选择1.6-release版本下载 2.安装: 直接解压即可: tar -zxf Mycat-s ...

随机推荐

  1. 简单的js hook

    // ==UserScript== // @name ethereum request // @namespace http://tampermonkey.net/ // @version 0.1 / ...

  2. 【剑指Offer】【数组】顺时针打印矩阵

    题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1 ...

  3. JS学习-异步JS

    异步JS setTimeout() 我们希望传递给setTimeout()中运行的函数的任何参数,都必须作为列表末尾的附加参数传递给它. function sayHi(who) { alert('He ...

  4. 【Java】【Mybatis】如何调用存储过程和存储函数

    https://www.jb51.net/article/230756.htm Mybatis调用存储过程 MyBatis支持使用存储过程的配置.当使用存储过程时,需要设置一个参数"mode ...

  5. mysql 1130报错只允许localhost登录解决方法

    提示:这些方法会改变登录权限,如果是生产服务器端谨慎操作!!! mysql出现错误码1130的解决办法: 错误描述: 错误代码:1130Host ***.***.***.*** is not allo ...

  6. HTML clean input cache

    .html <input  type="search"  autocomplete ="off" />

  7. WinForm - 自定义控件

    WinForm 自定义控件 --- 系统自带类型属性 引用 https://blog.csdn.net/qq_34059233/article/details/119636338 以SunnyUI为栗 ...

  8. Delphi中KeyPress、KeyUp、keydown事件区别

    KeyPress: 当用户按下键盘上的字符键(字母,数字) 会触发该事件,功能键则不会(F1-F12,Ctrl,Alt,Shift) KeyUp: 当按下键盘上的按键松开时,会触发OnKeyUp事件( ...

  9. 【redis-cli】常用命令

    -- 查看数据库下key存储数 redis-cli INFO | grep ^db -- 选择数据库 select [0-15] -- 列出所有key keys * -- 列出key模糊匹配 keys ...

  10. 使用DockerCompose部署微服务项目(基于Springboot搭建一个简易计数器)

    准备Dockerfile FROM java:8 #基于jdk8的环境 COPY *.jar /app.jar #拷贝所有的jar包到/app.jar目录下 CMD ["--server.p ...