MyCAT
什么是MyCAT?
- MyCAT相当于MySQL的Server层
- MySQL相当于MyCAT的存储层
- MyCAT不存储数据,所有数据存储在MySQL中
- MyCAT是一个数据库中间层
- 可以实现对后端数据库的分库分表和读写分离
- 对前端应用隐藏了后端数据库的存储逻辑
什么是数据库中间层及其作用?
实现后端数据库的读写分离及负载均衡
对业务数据库进行垂直切分
对业务数据库进行水平切分
控制数据库连接的数量
MyCAT的基本元素
逻辑库
- 对应用来说相当于MySQL中的数据库
- 逻辑库对应后端多个物理数据库
- 逻辑库并不保存数据
逻辑表
- 对应用来说相当于MySQL中的数据表
- 逻辑库对应后端多个物理数据库中的表
- 逻辑表并不保存数据
逻辑表的类别
- 分片表与非分片表按是否被分片划分(分片表就是具有相同表结构,但是存储在不同数据库中)
- 全局表,在所有分片都存在的表
- ER关系表,按ER关系进行分片的表
MySQL核心配置
常用配置文件间的关系
- server.xml–对系统参数和用户权限进行配置
- schema.xml–对逻辑库和逻辑表进行配置
- rule.xml–逻辑表中涉及水平切分进行规则配置
- log4j2.xml–配置日志格式
server.xml
server.xml用于配置系统相关参数、用户访问权限以及SQL防火墙及SQL拦截功能
<!-- <system>配置MyCAT系统参数-->
<system>
<!-- key-value -->
<property name = "${key} ">${value}</property>
</system>
<system>
<property name="serverPort">8066</property> <property name="managerPort">9066</property>
</system>
<!-- <user>配置MyCAT的访问用户及权限 -->
<user name="user">
<property name="password">user</property>
<!-- 用户可访问的数据库 -->
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
<!-- 多数据库访问设置-->
<property name="schemas">db1,db2,db3...</property>
<!-- 表级DML权限设置 -->
<!-- 数字代表:insert、updata、seect、delete-->
<privileges check="false">
<schema name="TESTDB" dml="0110" >
<table name="tb01" dml="0000"></table>
<table name="tb02" dml="1111"></table>
</schema>
</privileges>
log4j2.xml
- 配置输出日志的格式
- 配置输出日志的级别
<!-- %5p表示输出的日志级别 -->
<!-- %t日志中记录线程名称 -->
<!-- %m输出代码中提及的消息 -->
<!-- %n是换行符 -->
<PatternLayout>
<Pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} %5p [%t] (%l) - %m%n</Pattern>
</PatternLayout>
<!-- 日志级别 All < Trace < Debug < Info < Warn < Error < Fatal < OFF -->
<asyncRoot level="info" includeLocation="true">
rule.xml
- 配置水平分片的分片规则
- 配置分片规则所对应的分片函数
<tableRule name="rule1"><!-- rule1是分片函数(不可重复) -->
<rule>
<columns>id</columns><!-- 分片列,MyCAT对分片列进行运算