个人专题目录
一、MySQL+MyCat分库分表
1 MyCat简介
java编写的数据库中间件
Mycat运行环境需要JDK.
Mycat是中间件.运行在代码应用和MySQL数据库之间的应用.
前身 : corba. 是阿里开发的数据库中间件.实现MySQL数据库分库分表集群管理的中间件.曾经出现过重大事故. 二次开发,形成Mycat.
使用MyCat之后,编写的所有的SQL语句,必须严格遵守SQL标准规范.
insert into table_name(column_name) values(column_value);
使用MyCat中间件后的结构图如下:
2 MyCat术语简介
2.1 切分
逻辑上的切分. 在物理层面,是使用多库[database],多表[table]实现的切分.
2.1.1 纵向切分
把一个数据库切分成多个数据库,配置方便
只能实现两张表的表连接查询.
将一张表中的数据,分散到若干个database的同结构表中。多个表的数据的集合是当前表格的数据。
2.1.2 横向切分
把一个表切分成多个表,相比纵向切分配置麻烦
无法实现表连接查询.
将一张表的字段,分散到若干张表中,将若干表连接到一起,才是当前表的完整数据。
2.2 逻辑库
Mycat中定义的database.是逻辑上存在的.但是物理上未必存在.
主要是针对纵向切分提供的概念.
访问MyCat,就是将MyCat当做MySQL使用。
Db数据库是MyCat中定义的database。通过SQL访问MyCat中的db库的时候,对应的是MySQL中的db1,db2,db3三个库。物理上的database是db1,db2,db3.逻辑上的database就是db。
2.3 逻辑表
Mycat中定义的table.是逻辑上存在,物理上未必存在.
主要是针对横向切分提供的概念
MyCat中的表格table,其字段分散到MySQL数据库的表格table1,table2,table3中。
2.4 默认端口
Mycat默认端口是8066
2.5 数据主机 - dataHost
物理MySQL存放的主机地址.可以使用主机名,IP,域名定义.
2.6 数据节点 - dataNode
物理的database是什么.数据保存的物理节点.就是database.
2.7 分片规则
当控制数据的时候,如何访问物理database和table.
就是访问dataHost和dataNode的算法.
在Mycat处理具体的数据CRUD的时候,如何访问dataHost和dataNode的算法.如:哈希算法,crc16算法等.
3 Mycat搭建
3.1 安装JDK
略
3.2 主从备份搭建完成
3.3 安装mycat
解压缩: tar -zxf mycat-xxxx.tar.gz
3.4 Master提供可被Mycat访问的用户
在Mycat中通过Master数据库的root用户访问Master数据库.
grant all privileges on . to ‘username’@’ip’ identified by ‘password’ with grant option;
grant all privileges on . to 'mycat'@'%' identified by 'mycat' with grant option;
3.5 上传mycat
Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
3.6 解压缩
tar -zxf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
3.7 Mycat配置文件详解
Mycat所有的配置文件,都在应用的conf目录中.
3.7.1 rule.xml
用于定义分片规则的配置文件.
主要是查看.很少修改.
mycat默认的分片规则: 以500万为单位,实现分片规则.
逻辑库A对应dataNode - db1和db2. 1-500万保存在db1中, 500万零1到1000万保存在db2中,1000万零1到1500万保存在db1中.依次类推.
<tableRule name="auto-sharding-long"> <rule> <columns>id</columns> <algorithm>rang-long</algorithm> </rule> </tableRule>
crc32slot规则: 在CRUD操作时,根据具体数据的crc32算法计算,数据应该保存在哪一个dataNode中. 算法类似模运算.
<tableRule name="crc32slot"> <rule> <columns>id</columns> <algorithm>crc32slot</algorithm> </rule> </tableRule>
3.7.2 schema.xml
用于定义逻辑库和逻辑表的配置文件.在配置文件中可以定义读写分离,逻辑库,逻辑表,dataHost,dataNode等信息.
配置文件解释:
3.7.2.1 标签schema
配置逻辑库的标签
3.7.2.1.1 属性name
逻辑库名称
3.7.2.1.2 属性checkSQLschema
是否检测SQL语法中的schema信息.
如: Mycat逻辑库名称 A, dataNode名称B
SQL : select * from A.table;
checkSQLschema值是true, Mycat发送到数据库的SQL是select * from table;
checkSQLschema值是false,Mycat发送的数据库的SQL是select * from A.table;
3.7.2.1.3 sqlMaxLimit
Mycat在执行SQL的时候,如果SQL语法中没有limit子句.自动增加limit子句. 避免一次性得到过多的数据,影响效率. limit子句的限制数量默认配置为100.如果SQL中有具体的limit子句,当前属性失效.
SQL : select * from table . mycat解析后: select * from table limit 100
SQL : select * from table limit 10 . mycat不做任何操作修改.