mycat
mycat的优势:
- 实现后端数据库的读写分离和负载均衡
- 支持写DB高可用,
- 作用
- 数据库进行垂直切分,
- 进行水平切分
- 控制数据库连接的数量
- mycat 基本元素
- 逻辑库:即后端切分后的数据库
- 对应后端多个物理数据库
- 逻辑库中不保存数据
逻辑表
- 对应用来说相当于mysql的数据表
- 逻辑表可对应后端多个物理数据库的表
- 逻辑表中不保存数据
逻辑表的分类
- 分片表和非分片表按是否被分片划分
- 全局表,在所有分片中都存在的表
- ER关系表,按照ER关系分片的表
安装注意事项
- jdk必须在1.7及以上版本
- 在conf里面,修改wrapper.conf中修改配置内存大小(在自己的虚拟机里面,这需要修改,不然内存不够用)
配置文件
- server.xml:是服务之间的配,用户认证之类
- schema.xml:就是逻辑表,逻辑库的配置
- rule.xml:就是对分表分库的规则的配置
- log4j2.xml:就是日志文件
server.xml
- 配置系统参数
- 配置用户访问权限
- 配置sql防火墙和sql拦截功能 配置端口信息 基本的一些配置
- 用户权限配置
- 密码加密 执行命令之后,放入配置文件,并在配置上面加上
- 配置访问的数据库
- 配置访问的权限 1111 四位数表示新增,修改,查询和删除的权限,1表示有,0表示没有
log4j2.xml
- 配置输出日志的格式
- 配置输出日志的级别
- 配置讲解:
- %d{yyyy-MM-dd HH:mm:ss:SSS}:表示日志的时间格式
- %5p表示日志输出的级别
- %t:线程信息
- %m表示代码中提定的信息
- %n 表示输出一个回车符号
- 日志级别
- 配置讲解:
rule.xml
- 配置水平分片的分片规则
- 配置分片规则对应的分片函数
- 名字要唯一(全局唯一,最好是模块+表+分块数+分块依据)
- 名字就是算法的名称,放在algorithm标签中
常用的分片算法
- 简单取模:PartitionByMod
- 哈希取模:PartitionByHash
- 分片枚举:PartitionByFileMap
- 字符串范围取模
简单取模
- 可用于分片列为整数的表
- 分片列mode分片基数
- 类全名;io.mycat.route.function.PartitionByMod(不同版本class不同,找官方文档确认)
哈希取模:PartitionByHash
- 可以用于多种数据类型,字符串,日期等
- hash(分片列)mode分片基数
- 类全名:io,mycat.route.function.PartitionByHash(不同版本class不同,找官方文档确认)
分片枚举:PartitionByFileMap
- 根据可能的枚举值来指定数据存储的位置
- $mycat/conf增加MapFile配置枚举值同节点的对应关系
- 类全名:io,mycat.route.function.PartitionByFileMap(不同版本class不同,找官方文档确认)
字符串范围取模
- 可以根据字符串前N个字符确认存储位置
- $mycat/conf增加MapFile配置字符串取值范围和节点的关系
- 类全名:io,mycat.route.function.PartitionByPrefixPatten(不同版本class不同,找官方文档确认)
schema.xml
- 配置逻辑表和逻辑库
- 配置逻辑表存储的数据节点
- 配置数据节点对应的物理数据库服务器信息
- 配置逻辑库,name是逻辑库的命名,sqlMaxLimit是返回最大数据数,checkSQLschema检查发给mycat的语句中是否包含库名
- name是逻辑表的名称,primaryKey是逻辑表的主键,dataNode是表数据所存储的数据节点,rule是rule.xml中配置的分片规则
- name属性必须唯一,dataHost定义分片所在的物理主机