Mycat学习笔记

MyCat原理

Mycat实际上只是一个数据库的中间件,他并不存储任何数据。所以当有一天我们不用Mycat了只需要把mysql中的数据归集以后就能正常使用。

Mycat的作用是统一出口,查询缓存,查询优化。

MyCat特点

1.支持 SQL 92标准 支持Mysql集群,可以作为Proxy使用 支持JDBC连接ORACLE、DB2、SQL Server,将其模拟为MySQL Server使用 支持galera for mysql集群,percona-cluster或者mariadb cluster,提供高可用性数据分片集群,自动故障切换,高可用性 。
2.支持读写分离(参考具体的schema.xml配置)。
3.支持Mysql双主多从,以及一主多从的模式 。
4.支持全局表。
5.支持数据自动分片到多个节点,用于高效表关联查询 。
6.垮库join,支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询多平台支持,部署和实施简单。
7.支持nosql数据库mongoDB。

安装环境

系统:windows

JDK版本:1.7

MySql客户端:navicat

MyCat下载地址:http://dl.mycat.io/1.6-RELEASE/

安装步骤

1.下载安装包解压

2.配置环境变量

3.进入D:\mycat\bin  修改 schema.xml

Schema

name:逻辑库名称,sqlMaxLimit:默认显示条数

Table

name:逻辑表名称,rule:分片规则

4.进入D:\mycat\bin  修改 Server.xml  该文件配置MyCat连接的账户信息

5.进入D:\mycat\bin  修改 rule.xml

tableRule

name:规则名称 , column:分片的列 ,algorithm:function的名字

function

name:方法名称 , class:实现分片的具体类

6.启动MayCat,双击startup_nowrap.bat启动mycat服务

7.打开navicat客户端,连接mycat。 账户:root,密码:123456,端口:8066

8.连接mysql ,账户:root,密码:123456,端口:3306

根据rule2分片

在mysql  db1,db2,db3,db4每个库下面建立表t_user,创建表脚本如下:

DROP TABLE IF EXISTS `t_user`;
CREATE TABLE `t_user` (
`user_id` int(11) NOT NULL COMMENT ‘用户ID‘,
`receive_address` varchar(256) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT ‘收货地址‘,
`create_time` datetime NOT NULL,
`province_code` varchar(10) COLLATE utf8_unicode_ci DEFAULT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci COMMENT=‘用户信息表‘;

在mycat的TESTDB下面的的表t_user插入3000条数据,数据自动分配到4个mysql数据库中。

根据sharding-by-month分片

在mysql  db1-db12每个库下面建立表wallet_profit,创建表脚本如下:

DROP TABLE IF EXISTS `wallet_profit`;
CREATE TABLE `wallet_profit` (
`id` bigint(18) NOT NULL AUTO_INCREMENT,
`member_id` bigint(18) NOT NULL COMMENT ‘会员ID‘,
`profit_date` date NOT NULL COMMENT ‘计息时间‘,
`prod_id` bigint(18) NOT NULL,
`wallet_amount` bigint(22) NOT NULL COMMENT ‘金额‘,
`day_wallet_profit` bigint(22) NOT NULL COMMENT ‘昨日总利息‘,
`base_profit` bigint(22) NOT NULL COMMENT ‘基础利息‘,
`coupon_profit` bigint(22) DEFAULT NULL COMMENT ‘加息券利息‘,
`annual_rate` int(11) NOT NULL COMMENT ‘基础年化‘,
`coupon_rate` int(11) NOT NULL COMMENT ‘加息券年化‘,
`gmt_create` datetime DEFAULT NULL,
`gmt_modify` datetime DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_withdraw_profit_member_id` (`member_id`) USING BTREE,
KEY `idx_withdraw_profit_date` (`profit_date`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT=‘收益表‘;

在mycat的TESTDB下面的的表wallet_profit插入以下数据,数据将按照月份分配到12个数据库中。

INSERT INTO `wallet_profit` (`id`, `member_id`, `profit_date`, `prod_id`, `wallet_amount`, `day_wallet_profit`, `base_profit`, `coupon_profit`, `annual_rate`, `coupon_rate`, `gmt_create`, `gmt_modify`) VALUES (‘100000000000287210‘, ‘600000000000015303‘, ‘2016-01-01‘, ‘100000000000000001‘, ‘4000300‘, ‘1100‘, ‘876‘, ‘219‘, ‘80000‘, ‘20000‘, ‘2016-01-02 00:40:00‘, ‘2016-01-02 00:40:00‘);
INSERT INTO `wallet_profit` (`id`, `member_id`, `profit_date`, `prod_id`, `wallet_amount`, `day_wallet_profit`, `base_profit`, `coupon_profit`, `annual_rate`, `coupon_rate`, `gmt_create`, `gmt_modify`) VALUES (‘100000000001100149‘, ‘600000000000059488‘, ‘2016-02-01‘, ‘100000000000000001‘, ‘2000248200‘, ‘548000‘, ‘438410‘, ‘109602‘, ‘80000‘, ‘20000‘, ‘2016-02-02 00:40:01‘, ‘2016-02-02 00:40:01‘);
INSERT INTO `wallet_profit` (`id`, `member_id`, `profit_date`, `prod_id`, `wallet_amount`, `day_wallet_profit`, `base_profit`, `coupon_profit`, `annual_rate`, `coupon_rate`, `gmt_create`, `gmt_modify`) VALUES (‘100000000002350084‘, ‘600000000000328547‘, ‘2016-03-01‘, ‘100000000000000001‘, ‘300‘, ‘0‘, ‘0‘, ‘0‘, ‘80000‘, ‘20000‘, ‘2016-03-02 00:40:00‘, ‘2016-03-02 00:40:00‘);
INSERT INTO `wallet_profit` (`id`, `member_id`, `profit_date`, `prod_id`, `wallet_amount`, `day_wallet_profit`, `base_profit`, `coupon_profit`, `annual_rate`, `coupon_rate`, `gmt_create`, `gmt_modify`) VALUES (‘100000000003981684‘, ‘600000000000005348‘, ‘2016-04-01‘, ‘100000000000000001‘, ‘20000000‘, ‘6000‘, ‘4383‘, ‘1643‘, ‘80000‘, ‘30000‘, ‘2016-04-02 00:10:00‘, ‘2016-04-02 00:10:00‘);
INSERT INTO `wallet_profit` (`id`, `member_id`, `profit_date`, `prod_id`, `wallet_amount`, `day_wallet_profit`, `base_profit`, `coupon_profit`, `annual_rate`, `coupon_rate`, `gmt_create`, `gmt_modify`) VALUES (‘100000000005839454‘, ‘600000000000036991‘, ‘2016-05-01‘, ‘100000000000000001‘, ‘75783900‘, ‘20800‘, ‘16610‘, ‘4152‘, ‘80000‘, ‘20000‘, ‘2016-05-02 00:10:00‘, ‘2016-05-02 00:10:00‘);
INSERT INTO `wallet_profit` (`id`, `member_id`, `profit_date`, `prod_id`, `wallet_amount`, `day_wallet_profit`, `base_profit`, `coupon_profit`, `annual_rate`, `coupon_rate`, `gmt_create`, `gmt_modify`) VALUES (‘100000000007989136‘, ‘600000000000009157‘, ‘2016-06-01‘, ‘100000000000000001‘, ‘941194900‘, ‘283600‘, ‘206289‘, ‘77358‘, ‘80000‘, ‘30000‘, ‘2016-06-02 00:10:00‘, ‘2016-06-02 00:10:00‘);
INSERT INTO `wallet_profit` (`id`, `member_id`, `profit_date`, `prod_id`, `wallet_amount`, `day_wallet_profit`, `base_profit`, `coupon_profit`, `annual_rate`, `coupon_rate`, `gmt_create`, `gmt_modify`) VALUES (‘100000000010286130‘, ‘600000000000362561‘, ‘2016-07-01‘, ‘100000000000000001‘, ‘1949012700‘, ‘587400‘, ‘427180‘, ‘160192‘, ‘80000‘, ‘30000‘, ‘2016-07-02 00:10:00‘, ‘2016-07-02 00:10:00‘);
INSERT INTO `wallet_profit` (`id`, `member_id`, `profit_date`, `prod_id`, `wallet_amount`, `day_wallet_profit`, `base_profit`, `coupon_profit`, `annual_rate`, `coupon_rate`, `gmt_create`, `gmt_modify`) VALUES (‘100000000012917800‘, ‘600000000000543800‘, ‘2016-08-01‘, ‘100000000000000656‘, ‘4930000‘, ‘1200‘, ‘1080‘, ‘135‘, ‘80000‘, ‘10000‘, ‘2016-08-02 00:10:00‘, ‘2016-08-02 00:10:00‘);
INSERT INTO `wallet_profit` (`id`, `member_id`, `profit_date`, `prod_id`, `wallet_amount`, `day_wallet_profit`, `base_profit`, `coupon_profit`, `annual_rate`, `coupon_rate`, `gmt_create`, `gmt_modify`) VALUES (‘100000000016961611‘, ‘600000000000614085‘, ‘2016-09-01‘, ‘100000000000000656‘, ‘250068500‘, ‘68500‘, ‘54809‘, ‘13702‘, ‘80000‘, ‘20000‘, ‘2016-09-02 00:10:00‘, ‘2016-09-02 00:10:00‘);
INSERT INTO `wallet_profit` (`id`, `member_id`, `profit_date`, `prod_id`, `wallet_amount`, `day_wallet_profit`, `base_profit`, `coupon_profit`, `annual_rate`, `coupon_rate`, `gmt_create`, `gmt_modify`) VALUES (‘100000000023765373‘, ‘600000000000006820‘, ‘2016-10-01‘, ‘100000000000000656‘, ‘434073900‘, ‘130800‘, ‘95139‘, ‘35677‘, ‘80000‘, ‘30000‘, ‘2016-10-02 00:10:00‘, ‘2016-10-02 00:10:00‘);
INSERT INTO `wallet_profit` (`id`, `member_id`, `profit_date`, `prod_id`, `wallet_amount`, `day_wallet_profit`, `base_profit`, `coupon_profit`, `annual_rate`, `coupon_rate`, `gmt_create`, `gmt_modify`) VALUES (‘100000000031369981‘, ‘600000000000684383‘, ‘2016-11-01‘, ‘100000000000000656‘, ‘630350900‘, ‘172700‘, ‘138159‘, ‘34539‘, ‘80000‘, ‘20000‘, ‘2016-11-02 00:10:00‘, ‘2016-11-02 00:10:00‘);
INSERT INTO `wallet_profit` (`id`, `member_id`, `profit_date`, `prod_id`, `wallet_amount`, `day_wallet_profit`, `base_profit`, `coupon_profit`, `annual_rate`, `coupon_rate`, `gmt_create`, `gmt_modify`) VALUES (‘100000000039289911‘, ‘600000000000732505‘, ‘2016-12-01‘, ‘100000000000000656‘, ‘35000000‘, ‘11500‘, ‘7671‘, ‘3835‘, ‘80000‘, ‘40000‘, ‘2016-12-02 00:10:00‘, ‘2016-12-02 00:10:00‘);

时间: 2024-10-06 18:00:49

Mycat学习笔记的相关文章

MyCat 学习笔记 第十篇.数据分片 之 ER分片

1 应用场景 这篇来说下mycat中自带的er关系分片,所谓er关系分片即可以理解为有关联关系表之间数据分片.类似于订单主表与订单详情表间的分片存储规则. 本文所说的er分片分为两种: a. 依据主键进行数据分片,验证发现主表数据保存在第1个datanode中,子表数据根据分片规则存储. b. 依据分片关键字段进行分片,验证发现主表与子表根据分片规则存储,且保存在相同的分片内. 接下来,可以下实际配置与数据验证 2 环境说明 参考  <MyCat 学习笔记>第六篇.数据分片 之 按月数据分片 

《Mycat学习笔记》 第二篇. MySql 读写分离与日志分析——主从多结点

1    环境说明 接上篇环境   <Mycat学习笔记> 第一篇. MySql 读写分离与日志分析——主从单结点 http://www.cnblogs.com/kaye0110/p/5134588.html 增加一套 mysql 实例,端口为3308 ,通过Binlog方式同步主机情况 localhost : 3306 主机,    在mycat 中配置为 writehost 1 localhost : 3307 从机 a ,在mycat 中配置为 readhost localhost :

《Mycat学习笔记》 第三篇. MySql 主从同步异常后,主从切换

1)系统环境说明 MySql 5.5 主从节点 127.0.0.1:3306   主结点,为验证主从切换效果,手动停止服务 127.0.0.1: 3307    从结点 1 127.0.0.1:338     从结点 2 ,为验证主从切换效果,在主结点停止后,新增两个记录. MyCat 1.5 schema.xml 配置 具体配置说明,参考上篇: <Mycat学习笔记> 第二篇. MySql 读写分离与日志分析——主从多结点 <dataHost name="localhost1

《MyCat 学习笔记》第八篇.数据分片 之 求摸运算分片

1 应用场景 Mycat 自带了多套数据分片的机制,其实根据数值取摸应该是最简单的一种. 优点:数据离散概率较为平均,可以有效的提高应用的数据吞吐. 缺点:比较明显,后期数据运维与迁移比较困难.好在Mycat有对应的解决方案,具体后期验证或可直接参考Mycat权威指南相应章节. 2 环境说明 参考  <MyCat 学习笔记>第六篇.数据分片 之 按月数据分片  http://www.cnblogs.com/kaye0110/p/5160826.html 3 参数配置 3.1 server.xm

MyCat 学习笔记 第十一篇.数据分片 之 分片数据查询 ( select * from table_name limit 100000,100 )

1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150:  3307 MYCAT 1.5 服务部署在宿主机上 MYCAT 192.168.31.207 :8806[SQL执行端口] / 9066[管理端口] 2 应用场景 2.0 MYCAT配置 schema.xml <schema name="TESTDB" checkSQLschema=&quo

MyCat 学习笔记 第十三篇.数据分片 之 通过HINT执行存储过程

1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150:  3307 MYCAT 1.5 服务部署在宿主机上 MYCAT 192.168.31.207 :8806[SQL执行端口] / 9066[管理端口] 2 应用场景 2.0 MYCAT配置 schema.xml <schema name="TESTDB" checkSQLschema=&quo

MyCat 学习笔记 第十一篇.数据分片 之 分片事务处理

1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150:  3307 MYCAT 1.5 服务部署在宿主机上 MYCAT 192.168.31.207 :8806[SQL执行端口] / 9066[管理端口] 2 应用场景 2.0 MYCAT配置 schema.xml <schema name="TESTDB" checkSQLschema=&quo

《Mycat学习笔记》 番外篇一.客户端使用latin1字符集,后端MySQL为UTF8字符集,MyCat日志分析。

其实这个番外篇比较无聊——即客户端为lantin字符集,后面MySQL为U8字符集,MyCat在中间到底会起什么作用. 再说下本次验证的环境: Mac OS 10.11.2 MySQL 5.6 MyCat 1.5 OK,开始我们的验证工作. 1) 由于数据库与操作系统已被默认设置为U8编码,计划通过修改Mysql  “character_set_client” 参数调整客户端字符集配置进行验证. 关于MYSQL字符集较全面的介绍,请参考 <mysql_query("set names gb

《Mycat 学习笔记》 番外篇之系统命令 —— reload config

1)基础说明 Mycat (1.5版本)默认开通2个端口,可以在server.xml中进行修改. 8066 数据访问端口,即进行 DML 和 DDL 操作. 9066 数据库管理端口,即 mycat 服务管理控制功能. Mac 环境验证不通过,mysql 命令连接不到 mycat 服务端. 2)在 schema.xml 文件中增加一个新的数据表配置,下面红字标识 <schema name="TRDB" checkSQLschema="false" sqlMax

《Mycat学习笔记》 第四篇. MyCat 日志简单分析

环境说明 Windows 7  Mycat 1.5 Mysql 5.5 一个实例两个库 traveldata_db_1 和 traveldata_db_2 mysql> show databases;+--------------------+| Database |+--------------------+| information_schema || mycat_sync_test || mysql || performance_schema || traveldata_db_1 || t