MyCat2学习笔记
一、概念、原理、作用
1.1、MyCat是什么
MyCat是数据库中间件
- 数据库中间件
中间件:是一类连接软件组件和应用的计算机软件,以便于软件各部件之间的沟通。
例子:Tomcat,web中间件
数据库中间件:连接java应用程序和数据库 - 为什么要用Mycat
①Java与数据库紧耦合
②高访问量高并发对数据库的压力大
③读写请求数据不一致
1.2、MyCat的功能
-
读写分离
-
数据分片:垂直拆分(分库)、水平拆分(分表)、垂直+水平拆分(分库分表)
-
多数据源整合
1.3、原理
Mycat的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的SQL
语句,首先对SQL
语句做了一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此SQL发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。
这种方式把数据库的分布式从代码中解耦出来,程序员察觉不出来后台使用Mycat,还是MySQL。
二、安装启动
2.1、安装
官网下载地址
需要下载两个文件
- install-template/mycat2-install-template-1.20.zip(看自己想要版本)
- http://dl.mycat.org.cn/2.0/1.21-release/ (一定要下载最新的jar包)
下载所需的mycat2的jar包,一般大小为100mb 的一个 jar文件
把这个jar放进解压的zip中的mycat\lib
文件夹下
Linux 修改相关文件夹和文件的权限为 777
2.2、更改配置
更改conf文件夹下的datasourcescd /www/wwwroot/mycat2.0/conf/datasources
2.3、启动
cd mycat/bin
./mycat start
./mycat status
./mycat start 启动
./mycat stop 停止
./mycat console 前台运行
./mvcat install 添加到系统自动启动(暂未实现)
./mvcat· remove·取消随系统自动启动((暂未实现)
./mycat restart·重启服务
./mycat pause 暂停,
/mycat status 查看启动状态
2.4、登入
输入mysql -uroot -p123456 -h[ip] -P8066
(我是访问服务器)
三、Mycat2相关概念
3.1、概念描述
- 分库分表
按照一定规则把数据库中的表拆分为多个带有数据库实例,物理库,物理表访问路径的分表。
分库:一个电商项目,分为用户库、订单库等等。’
分表:一张订单表数据数百万,达到MySQL单表瓶颈,分到多个数据库中的多张表 - 逻辑库
数据库代理中的数据库,它可以包含多个逻辑表。
解Mycat.里定义的库,在逻辑上存在,物理上在MySQL里并不存在。有可能是多个MySQL数据库共同组成一个逻辑库。类似多个小孩叠罗汉穿上外套,扮演一个大人 - 逻辑表
数据库代理中的表,它可以映射代理连接的数据库中的表(物理表)
Mvcat里定义的表,在逻辑上存在,可以映射真实的MySQL数据库的表,可以一对一,也可以一对多。· - 物理库
数据库代理连接的数据库中的库
MySQL真实的数据库。 - 物理表
数据库代理连接的数据库中的表
MySQL真实的数据库中的真实数据表。 - 拆分键
即分片键,描述拆分逻辑表的数据规则的字段
比如订单表可以按照归属的用户id拆分,用户id就是拆分键 - 物理分表
指已经进行数据拆分的,在数据库上面的物理表,是分片表的一个分区
多个物理分表里的数据汇总就是逻辑表的全部数据( - 物理分库
一般指包含多个物理分表的库
参与数据分片的实际数据库 - 分库
一般指通过多个数据库拆分分片表,每个数据库一个物理分表,物理分库名字相同
分库是个动作,需要多个数据库参与。就像多个数据库是多个盘子,分库就是把一串数据葡萄,分到各个盘子里,而查询数据时,所有盘子的葡萄又通过Mycat2组成了完整的一串葡萄。 - 分片表,水平分片表
按照一定规则把数据拆分成多个分区的表I在分库分表语境下,它属于逻辑表的一种
安按照规则拆分数据,上个例子中的那串葡萄。 - 单表
没有分片,没有数据冗余的表,-
解读:没有拆分数据,也没有复制数据到别的库的表。 - 全局表,广播表
每个数据库实例都冗余全量数据的逻辑表.
它通过表数据冗余,使分片表的分区与该表的数据在同一个数据库实例里,达到 join运算能够直接在该数据库实例里执行.它的数据一致一般是通过数据库代理分发SQL实现.也有基于集群日志的实现
例如系统中翻译字段的字典表,每个分片表都需要完整的字典数据翻译字段。-
3.2、配置文件
3.2.1、server
在conf目录下
默认即可
3.2.2、Users
在conf目录下
命名方式:{用户名}.user.json
配置内容:
字段 | 含义 |
---|---|
ip | 客户端访问ip,建议为空null,填写后会对客户端的ip进行限制 |
username | 用户名 |
password | 密码 |
isolation | 设置初始化的事务隔离级别 |
transactionType | 事务类型 |
设置初始化的事务隔离级别:
READ_UNCOMMITTED: 1
READ_COMMITTED : 2
REPEATED_READ:3【默认】
SERIALIZABLE: 4
事务类型:
proxy:本地事务,在涉及大于1个数据库的事务, commit阶段失败会导致不一致,但是兼容性最好
xa:事务,需要确认存储节点集群类型是否支持Xa
可以通过语句实现切换
set transaction policy ='xa'
set transaction policy ='proxy'
可以通过语句查询
SELECT @@transaction_policy
3.2.3、datasource
在conf目录下
命名方式:{数据源名字}.datasource.json
配置内容:
字段 | 含义 |
---|---|
dbType | 数据库类型 |
name | 用户名 |
password | 密码 |
type | 数据源类型,默认JDBC |
url | 访问数据库地址 |
idleTimeout | 空闲连接超时时间 |
initSals | 初始化sal |
initSalsGetConnection | 对于jdbc每次获取连接是否都执行initSqlse |
instanceType | 配置实例只读还是读写 |
weight | 负载均衡权重 |
配置实例只读还是读写:
READ_WRITE
READ
WRITE
3.2.4、cluster
在conf目录下
命名方式:{集群名称}.cluster.json
配置内容:
字段 | 含义 |
---|---|
masters | 配置多个主节点,在主挂的时候会选一个检测存活的数据源作为主节点 |
replicas | 配置多个从节点 |
timer | MysQL集群心跳周期,配置则开启集群心跳,Mycat主动检测主从延迟以及高可用主从切换 |
clusterType | 集群类型 |
readBalanceType | 查询负载均衡策略 |
switchType | 切换类型 |
集群类型:
SINGLE_NODE:单一节点
MASTER_SLAVE:普通主从
GARELA_CLUSTER:.garela cluster/PXC集群
MHA: MHA集群
MGR: MGR集群
查询负载均衡策略:
BALANCE_ALL(默认值):获取集群中所有数据源
BALANCE_ALL_READ:获取集群中允许读的数据源
BALANCE_READ_WRITE:获取集群中允许读写的数据源,但允许读的数据源优先
BALANCE_NONE:获取集群中允许写数据源,即主节点中选择
切换类型:
NOT_SWITCH:不进行主从切换
WITCH:进行主从切换
3.2.5、schema
在conf目录下
命名方式:{库名}.schema.json
配置内容:
字段 | 含义 |
---|---|
schemaName | 逻辑库名 |
targetName | 目的数据源或集群 |
targetName自动从prototype目标加载test库下的物理表或者视图作为单表, prototype必须是mysql服务器 |