首先说一下为什么选择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. IDEA中已配置阿里镜像,但maven无法下载jar包的问题

    然后我还出现了一个问题,由于使用了HTTPS,存在着SSL证书验证的问题,因此我在IDEA中添加了一行配置: 配置如下: -Dmaven.wagon.http.ssl.insecure=true -D ...

  2. c++单例模式设计

    class singleClass { public: static singleClass* getInstance() { //双判断保证在多线程下不会每次getInstance都加锁 if(!m ...

  3. 写一个能快速删除文件的.bat图形化操作界面

    用.bat文件,快速删除想要删除的文件 1.首先在桌面上新建一个TXT文件 在文件里面写如图命令 如下: del C:\result.jtl \*.*/f/s/q/a(C:\result.jtl是想要 ...

  4. session共享问题、springboot 版本不统一问题

    问题:按照正常的程序将session 共享引入工程,但是一直取不到 原因:springboot 的版本不同导致,存session的springboot 用的是springboot1.5.6,而取ses ...

  5. jdk版本与项目依赖jar包不兼容

    这两天出现了一个 java.lang.RuntimeException: java.io.IOException: invalid constant type: 18 tomcat启动出现这个问题的原 ...

  6. git 代码已经commit ,发现提错了分支

    步骤: git reset HEAD^ //把上次提交恢复为未提交状态 git status //查看当前状态 git stash //将修改add到暂存区,暂存代码 git checkout 分支 ...

  7. 第一课 基本的DOS命令

    常见的DOS命令 1.#切换盘符 F: 2.#查看当前目录下所有文件 dir 3.#切换目录 cd change directory cd ..返回上一级 4.#清理屏幕 cls {clear scr ...

  8. Java Collection体系

    Collection 接口 宏观图 快速使用 import java.util.*; public class Demo { public static void main(String[] args ...

  9. STL库相关练习代码

    第一题: #include <iostream> #include <vector> #include <iterator> #include <string ...

  10. C# Async / Await State Machine

    The async/await keywords in C# are very much syntactical sugar that the compiler will use to generat ...