首先说一下为什么选择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给ul下面所有的li追加类名

  2. Linux安装两个anaconda

    安装过程 1.安装第一个Anaconda Anaconda的官方安装网址在 https://www.continuum.io/downloads/ 安装命令: bash Anaconda3-4.3.1 ...

  3. QTableWidget CSS样式

    QTableWidget { border:1px solid rgb(170, 170, 127); border-radius:3px; } QScrollBar::handle { backgr ...

  4. 记一次在MyBatis-Plus中 @TableField 自动填充中遇见的坑

    先放一张表生成策略对应的结果 值 描述 DEFAULT 默认不处理 INSERT 插入时填充字段 UPDATE 更新时填充字段 INSERT_UPDATE 插入和更新时填充字段 此处需要注意一下,如果 ...

  5. leecode62不同路径(动态规划)

    一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 "Start" ). 机器人每次只能向下或者向右移动一步.机器人试图达到网格的右下角(在下图中标记为 &quo ...

  6. Coursera Programming Languages, Part C 华盛顿大学 Week 2

    week 2 我们采用一种新的视角来对比 FP 与 OOP,即将问题分解 (decompose) 与实现 (implement) 的方式 OOP Versus Functional Decomposi ...

  7. Coursera Programming Languages, Part B 华盛顿大学 Homework 5

    这次 Week 2 的作业比较难,任务目标是使用 \(racket\) 给一个虚拟语言 \(MUPL\) (made-up programming language) 写一个解释器 所以单独开个贴来好 ...

  8. Docker部署Nastool(含jellyfin、transmission)

    先弄清楚原理 首先从[资源搜索]或者[推荐栏目]寻找自己想看的电影,执行订阅或者搜索资源启动下载,下载电影存放在downloads/mov目录下,[媒体整理]就是将mov子目录下电影文件复制到down ...

  9. b站——沐神——深度学习

    预备知识 数据操作 MXNet nd:(array函数:得到NDArray) [[1. 1. 1.] [1. 1. 1.]] <NDArray 2x3 @cpu(0)> np:(asnum ...

  10. GAN的两种训练方式,以及梯度求导问题——detch(),retain_graph

    http://t.zoukankan.com/LXP-Never-p-13951578.html detach():截断node反向传播的梯度流,将某个node变成不需要梯度的Varibale,因此当 ...