MyCAT2是一款基于阿里巴巴的开源项目数据库中间件。软件其稳定性、可靠性、出色的体系结构和性能作为企业数据库的MySQL群集,MyCAT2可以代替昂贵的ORACLE群集,以低成本将独立数据库和应用程序平稳地迁移到云端,完美的解决由于数据存储和业务规模的快速增长而引起的瓶颈问题。
软件功能
1、支持SQL92标准
2、遵守Mysql原生协议,跨语言,跨平台,跨数据库的通用中间件代理。
3、基于心跳的自动故障切换,支持读写分离,支持MySQL主从,以及galera cluster集群。
4、支持Galera for MySQL集群,Percona Cluster或者MariaDB cluster
5、基于Nio实现,有效管理线程,高并发问题。
6、支持数据的多片自动路由与聚合,支持sum,count,max等常用的聚合函数。
7、支持单库内部任意join,支持跨库2表join,甚至基于caltlet的多表join。
8、支持通过全局表,ER关系的分片策略,实现了高效的多表join查询。
9、支持多租户方案。
10、支持分布式事务(弱xa)。
11、支持全局序列号,解决分布式下的主键生成问题。
12、分片规则丰富,插件化开发,易于扩展。
13、强大的web,命令行监控。
14、支持前端作为mysq通用代理,后端JDBC方式支持Oracle、DB2、SQL Server、mongodb。
15、支持密码加密
16、支持服务降级
17、支持IP白名单
18、支持SQL黑名单、sql注入攻击拦截
19、支持分表(1.6)
20、集群基于ZooKeeper管理,在线升级,扩容,智能优化,大数据处理(2.0开发版)。
软件特色
1、基于阿里巴巴的开源项目Cobar,其稳定性,可靠性,出色的体系结构和性能以及许多成熟的用例使MyCAT有了良好的开端。站在巨人的肩膀上,MyCAT感到足够自信,可以走得更远。
2、MyCAT的基因整合了最好的开源项目和创新思想,使MyCAT领先于其他当前类似的开源项目,甚至超越了某些商业产品。
3、MyCAT支持强大的技术团队,该团队的参与者经验超过5年,其中包括一些高级软件工程师,架构师,DBA等。优秀的技术团队可确保Mycat的产品质量。
4、MyCAT不依赖任何商业公司。它与一些开源项目不同,后者的重要特征包含在其商业产品中,并使开源项目像装饰一样。
MyCAT2安装配置方法
1. 下载源码并编译
clone源代码
maven编译 mvn clean install
在target目录下找到操作系统对应的压缩包,如linux下的mycat2-0.1-20170906223147-linux.tar.gz
将压缩包解压缩到指定路径
2. 修改配置文件
配置文件在conf目录下,需要修改的配置文件包括:
mycat.yml,指定ip和端口号
user.yml,配置user信息,包括name和password,登录的时候需要按照指定的用户名密码登录,schemas对应为schema.yml中的schema,白名单功能默认关闭
cluster.yml,指定是否开启集群模式以及集群节点的基本信息,默认集群关闭
balancer.yml,指定是否开启负载均衡模式以及负载均衡的基本信息,默认负载均衡关闭
heartbeat.yml,配置心跳相关信息,可以使用默认值
schema.yml,设置相关的schema
datasource.yml,设置后端连接的复制组信息
replica-index.yml,设置复制组写节点配置,默认为0
3. 运行
运行的方式与 1.6 相同
linux 环境 运行 bin 目录下 ./mycat {console | start | stop | restart | status | dump }
window 环境 运行 bin 目录下 startup_nowrap.bat
运行成功后,使用 root 账号登录,登录密码 123456 登录,端口号为mycat.yml中配置的端口号,默认为8066
4. 集群启动
conf目录下,需要正确配置mycat.yml,cluster.yml,balancer.yml
配置完成后,按照第三步的方式依次启动各个节点的mycat,将自动进行集群管理
MyCAT2使用教程
前提:
准备两个MySQL服务器(prototype服务器),端口3306,3307 ,用户名:root 密码:123456
Mycat2的jar包
Mycat服务器级别配置
保证配置文件夹有server.json,内容至少是
{
"server":{
"ip":"127.0.0.1",
"mycatId":1,
"port":8066,
}
}
启动过程中,Mycat会在配置文件夹生成默认配置,加载上述的MySQL中的系统表,并建立用户名为
root 密码为123456
此时使用客户端登录Mycat即可
Mycat可以在控制台创建库
CREATE DATABASE db1
建库语句执行两个操作
1.更改mycat的整个库配置
2.在prototype服务器执行此SQL
Mycat可以在控制台操作
切换逻辑库
USE `db1`;
建表语句执行两个操作
1.更改mycat的整个库配置
2.在prototype服务器执行此SQL
删除逻辑库
DROP DATABASE db1
建表语句执行两个操作
1.更改mycat的整个库配置
2.在prototype服务器执行此SQL
创建单表
CREATE TABLE db1.`travelrecord` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` varchar(100) DEFAULT NULL,
`traveldate` date DEFAULT NULL,
`fee` decimal(10,0) DEFAULT NULL,
`days` int DEFAULT NULL,
`blob` longblob,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
建表语句执行两个操作
1.更改mycat的整个库配置
2.在prototype服务器执行此SQL
使用注释动态配置Mycat
如果使用MySQL官方客户端添加 -c 参数避免客户端过滤注释
添加存储数据源
/*+ mycat:createDataSource{
"name":"dw0",
"url":"jdbc:mysql://127.0.0.1:3306",
"user":"root",
"password":"123456"
} */;
/*+ mycat:createDataSource{
"name":"dr0",
"url":"jdbc:mysql://127.0.0.1:3306",
"user":"root",
"password":"123456"
} */;
/*+ mycat:createDataSource{
"name":"dw1",
"url":"jdbc:mysql://127.0.0.1:3307",
"user":"root",
"password":"123456"
} */;
/*+ mycat:createDataSource{
"name":"dr1",
"url":"jdbc:mysql://127.0.0.1:3307",
"user":"root",
"password":"123456"
} */;
添加集群配置
/*! mycat:createCluster{"name":"c0","masters":["dw0"],"replicas":["dr0"]} */;
/*! mycat:createCluster{"name":"c1","masters":["dw1"],"replicas":["dr1"]} */;
删除表
drop table db1.travelrecord
删表语句执行两个操作
1.更改mycat的整个库配置
2.在prototype服务器执行此SQL,而不会在其他存储节点执行
创建全局表
CREATE TABLE db1.`travelrecord` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` varchar(100) DEFAULT NULL,
`traveldate` date DEFAULT NULL,
`fee` decimal(10,0) DEFAULT NULL,
`days` int DEFAULT NULL,
`blob` longblob,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 BROADCAST;
建全局表语句执行操作
1.更改mycat的整个库配置
2.在prototype服务器执行此SQL
3.根据当前集群名字首字母为c的集群纳入到全局表的存储节点中
4.根据存储节点信息建立物理库,物理表
创建分片表
CREATE TABLE db1.`travelrecord` (
`id` bigint NOT NULL AUTO_INCREMENT,
`user_id` varchar(100) DEFAULT NULL,
`traveldate` date DEFAULT NULL,
`fee` decimal(10,0) DEFAULT NULL,
`days` int DEFAULT NULL,
`blob` longblob,
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by hash(id) tbpartition by hash(id) tbpartitions 2 dbpartitions 2;
建分片表语句执行操作
1.更改mycat的整个库配置
2.在prototype服务器执行此SQL
3.根据当前集群名字首字母为c的集群纳入到分片表的存储节点中
4.根据存储节点信息建立物理库,物理表
默认分片表的自增序列是雪花算法
更新日志
v1.13
修复所有下推中带有错误联合的连接
修复生成的sql带有类型转换导致mysql运算不正确
修复黑客路由器损坏
修复黑客路由器响应int类型可能超出数字范围
∨ 展开