它是一个开源的分布式数据库系统,是一个实现了 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/