它是一个开源的分布式数据库系统,是一个实现了 MySQL 协议的的 Server,前端用户可以把它看作是一个数据库代理,用 MySQL 客户端工具和命令行访问,而其后端可以用MySQL 原生(Native)协议与多个 MySQL 服务器通信,也可以用 JDBC 协议与大多数主流数据库服务器通信,其核心功能是分表分库,即将一个大表水平分割为 N 个小表,存储在后端 MySQL 服务器里或者其他数据库里。
支持SQL92标准
遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。
基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。
支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
基于Nio实现,有效管理线程,高并发问题。
支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数。
支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。
支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。
支持多租户方案。
支持分布式事务(弱xa)。
支持全局序列号,解决分布式下的主键生成问题。
分片规则丰富,插件化开发,易于扩展。
强大的web,命令行监控。
支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server 、 mongodb 、巨杉。
支持密码加密
支持服务降级
支持IP白名单
支持SQL黑名单、sql注入攻击拦截
支持分表(1.6)
集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。
https://github.com/MyCATApache/Mycat-download 具体下载哪个版本以发布为准,推荐稳定最新版(我这里使用1.6.6.1)
下载的文件直接解压即可。
./mycat start 启动
./mycat stop 停止
./mycat console 前台运行
./mycat install 添加到系统自动启动(暂未实现)
./mycat remove 取消随系统自动启动(暂未实现)
./mycat restart 重启服务
./mycat pause 暂停
./mycat status 查看启动状态
直接运行startup_nowrap.bat,如果出现闪退,在cmd 命令行运行,查看出错原因。
启动前,一般需要修改JVM配置参数,打开conf/wrapper.conf文件,如下行的内容为2G和2048,可根据本机配置情况修改为512M或其它值。 以下配置跟jvm参数完全一致,可以根据自己的jvm参数调整。
Java Additional Parameters
wrapper.java.additional.1=
wrapper.java.additional.1=-DMYCAT_HOME=.
wrapper.java.additional.2=-server
wrapper.java.additional.3=-XX:MaxPermSize=64M
wrapper.java.additional.4=-XX:+AggressiveOpts
wrapper.java.additional.5=-XX:MaxDirectMemorySize=100m
wrapper.java.additional.6=-Dcom.sun.management.jmxremote
wrapper.java.additional.7=-Dcom.sun.management.jmxremote.port=1984
wrapper.java.additional.8=-Dcom.sun.management.jmxremote.authenticate=false
wrapper.java.additional.9=-Dcom.sun.management.jmxremote.ssl=false
wrapper.java.additional.10=-Xmx100m
wrapper.java.additional.11=-Xms100m
wrapper.java.additional.12=-XX:+UseParNewGC
wrapper.java.additional.13=-XX:+UseConcMarkSweepGC
wrapper.java.additional.14=-XX:+UseCMSCompactAtFullCollection
wrapper.java.additional.15=-XX:CMSFullGCsBeforeCompaction=0
wrapper.java.additional.16=-XX:CMSInitiatingOccupancyFraction=70
以下配置作废:
wrapper.java.initmemory=3
wrapper.java.maxmemory=64
测试mycat与测试mysql完全一致,mysql怎么连接,mycat就怎么连接。
推荐先采用命令行测试:
mysql -uroot -proot -P8066 -h127.0.0.1
如果采用工具连接,1.6.6.1目前部分工具无法连接,会提示database not selected,建议采用高版本,navicat测试。1.5已经修复了部分工具连接。
server.xml
重点关注下面这段,其他默认即可。
参数
说明
user
用户配置节点
--name
登录的用户名,也就是连接Mycat的用户名
--password
登录的密码,也就是连接Mycat的密码
--schemas
数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs
--privileges
配置用户针对表的增删改查的权限,具体见文档吧
schema.xml
参数
说明
schema
数据库设置,此数据库为逻辑数据库,name与server.xml中schema对应
dataNode
分片信息,也就是分库相关配置
dataHost
物理数据库,真正存储数据的数据库
每个节点的属性逐一说明:
schema:
属性
说明
name
逻辑数据库名,与server.xml中的schema对应
checkSQLschema
数据库前缀相关设置,建议看文档,这里暂时设为folse
sqlMaxLimit
select 时默认的limit,避免查询全表
table:
属性
说明
name
表名,物理数据库中表名
dataNode
表存储到哪些节点,多个节点用逗号分隔。节点为下文dataNode设置的name
primaryKey
主键字段名,自动生成主键时需要设置
autoIncrement
是否自增
rule
分片规则名,具体规则下文rule详细介绍
dataNode
属性
说明
name
节点名,与table中dataNode对应
datahost
物理数据库名,与datahost中name对应
database
物理数据库中数据库名
dataHost
属性
说明
name
物理数据库名,与dataNode中dataHost对应
balance
均衡负载的方式
writeType
写入方式
dbType
数据库类型
heartbeat
心跳检测语句,注意语句结尾的分号要加。
Mycat 运行
可能会出现问题 (主要是数据源问题或者不能连接到mysql)
我之前遇到的 nvalid datasource:0 invalid datasource:1
1.需要更改 mysql中的mysql.user表中的root 用户的 host改为%
2.mysql配置项 增加 skip-grant-tables
成功时
插入两条数据
在mycat中取数据
分库分表规则 按照rule.xml中的配置
《Mycat权威指南》: http://www.mycat.io/document/Mycat_V1.6.0.pdf
官网 :http://www.mycat.io/
下载地址:http://dl.mycat.io/