适用范围
Mycat 发展到现在,适用的场景已经很丰富,而且不断有新用户给出新的创新性的方案,以下是几个典型的
适用场景:
- 单纯的读写分离,此时配置最为简单,支持读写分离,主从切换;
- 分表分库,对于超过 1000 万的表进行分片,最大支持 1000 亿的单表分片;
- 多租户应用,每个应用一个库,但应用程序只连接 Mycat,从而不改造程序本身,实现多租户化;
- 报表系统,借助于 Mycat 的分表能力,处理大规模报表的统计;
- 替代 Hbase,分析大数据;
- 作为海量数据实时查询的一种简单有效方案,比如 100 亿条频繁查询的记录需要在 3 秒内查询出来结果,除了基于主键的查询,还可能存在范围查询或其他属性查询,此时 Mycat 可能是最简单有效的选择。
原理概述
Mycat 的原理中最重要的一个动词是“拦截”,它拦截了用户发送过来的 SQL 语句,首先对 SQL 语句做了
一些特定的分析:如分片分析、路由分析、读写分离分析、缓存分析等,然后将此 SQL 发往后端的真实数据库,并将返回的结果做适当的处理,最终再返回给用户。

方案概述
两台虚拟机 10.0.0.51(db01)、10.0.0.52(db02)
每台创建四个mysql实例:3307 3308 3309 3310
| 服务器 | 端口 | 端口 | 端口 | 端口 |
|---|---|---|---|---|
| 10.0.0.51 | 3307 | 3308 | 3309 | 3310 |
| 10.0.0.52 | 3307 | 3308 | 3309 | 3310 |
主从节点规划(–> 指向为主节点)
10.0.0.52:3307 <-----> 10.0.0.51:3307
10.0.0.52:3309 -------> 10.0.0.52:3307
10.0.0.51:3309 -------> 10.0.0.51:3307
10.0.0.52:3308 <-----> 10.0.0.51:3308
10.0.0.52:3310 -------> 10.0.0.52:3308
10.0.0.51:3310 -------> 10.0.0.51:3308
实施步骤
一. 基础环境配置
1. 实例搭建:略
2. 配置主从环境
[root@mysql local]#mysql -S /data/3307/mysql.sock -e "create user root@'10.0.0.%' identified with mysql_native_password by '******'; grant all on *.* to root@'10.0.0.%';"
[root@mysql local]#mysql -S /data/3307/mysql.sock -e "CHANGE MASTER TO MASTER_HOST='10.0.0.52', MASTER_PORT=3307, MASTER_AUTO_POSITION=1,MASTER_USER='repl', MASTER_PASSWORD='123';"
[root@mysql local]#mysql -S /data/3307/mysql.sock -e "start slave;"
[root@mysql local]#mysql -S /data/3307/mysql.sock -e "show slave status\G"|grep Running:
参照主从节点规划配置
3. 检测主从状态
[root@mysql local]#mysql -S /data/3307/mysql.sock -e "show slave status\G"|grep Yes
二. MyCAT安装
1. 预先安装Java运行环境
[root@mysql local]#yum install -y java
2. 下载mycat
http://dl.mycat.org.cn/
Mycat-server-xxxxx.linux.tar.gz
3. 解压文件并查看软件目录结构
[root@mysql local]#tar xf Mycat-server-*
[root@mysql local]#ls
bin catlet conf lib logs version.txt
4. 启动和连接
配置环境变量
vim /etc/profile
export PATH=/data/app/mycat/bin:$PATH
source /etc/profile
启动
[root@mysql local]#mycat start
连接
[root@mysql local]#mysql -uroot -p123456 -h 127.0.0.1 -P8066
注:Mycat中使用的是MySQL 5.1版本驱动,连接8.0时将会失败。
解决方案:
(1)下载更新客户端程序
https://downloads.mysql.com/archives/c-j/
(2)连接时添加auth=mysql_native_password参数
mysql -uroot -p123456 -h10.0.0.52 -P8066 --default-auth=mysql_native_password
(3)更新MySQL客户端命令为8.0之前版本
三. 配置文件介绍
1. bin
程序目录
2. conf
配置文件目录
autopartition-long.txt :分片相关
auto-sharding-long.txt :分片相关
auto-sharding-rang-mod.txt :分片相关
cacheservice.properties :缓存配置
dbseq.sql
dbseq - utf8mb4.sql
Dnindex.properties :当前节点切换情况
ehcache.xml
index_to_charset.properties
log4j2.xml :日志系统
migrateTables.properties
myid.properties
partition-hash-int.txt
partition-range-mod.txt
rule.xml :分片策略使用方法
schema.xml :配置文件
sequence_conf.properties
sequence_db_conf.properties
sequence_distributed_conf.properties
sequence_http_conf.properties
sequence_time_conf.properties
server.xml :mycat运行模式相关
sharding-by-enum.txt
wrapper.conf
Zkconf :zookeeper相关功能,zookeeper就是集中管理
Zkdownload :zookeeper相关功能
3. schema.xml
主配置文件:节点信息、读写分离、高可用设置、调用分片策略…
4. rule.xml
分片策略的定义、功能、使用用方法
5. server.xml
mycat服务有关配置: 用户、网络、权限、策略、资源…
6. xx.txt文件
分片参数定义文件
7. log4j2.xml
Mycat 相关日志记录配置
8. logs
wrapper.log : 启动日志
mycat.log :工作日志
四. schema.xml配置文件基本结构
1. 配置模板介绍
[root@mysql local]#cd /data/mycat/conf/
[root@mysql local]#mv schema.xml schema.xml.bak
[root@mysql local]#vim schema.xml
# 逻辑库:
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema>
schema name="TESTDB" :逻辑库名
checkSQLschema="false" :是否检查数据库,最好先进入库再查询表
sqlMaxLimit="100" :分表才有用,只做读写是没有用的,将结果集限制为100行,减少结果集,mycat有自己的缓存机制,减少缓存压力
dataNode="dn1:默认访问节点(未分片部分)
#需做拆分的表
<table name="travelrecord,address" dataNode="dn1,dn2,dn3" rule="auto-sharding-long" splitTableNames ="true"/>
table name="travelrecord,address" :指定做分片的表
dataNode="dn1,dn2,dn3" :要拆分为这三个分片
rule="auto-sharding-long" :分片策略
splitTableNames ="true":
# DN数据节点(逻辑分片):数据节点(逻辑分片):
<dataNode name="dn1" dataHost="localhost1" database= "world" />
dataNode name="dn1" :分片节点名称
dataHost="localhost1" :节点名称(建议改成不同名称)
database= "world":后端数据库库名


作用:垂直和水平拆分及高可用和读写分离




