mycat2.0教程
一、安装部署
1.1、文件下载(要安装jdk1.8环境才能启动mycat)
1 2 | wget http: //dl .mycat.org.cn /2 .0 /install-template/mycat2-install-template-1 .21.zip wget http: //dl .mycat.org.cn /2 .0 /1 .21-release /mycat2-1 .21-release-jar-with-dependencies.jar |
1.2 安装Mycat
1 2 3 4 5 6 7 8 9 10 | #程序安装目录为/data,解压并移到到/data目录 cd /data/tools unzip mycat2- install -template-1.21.zip mv mycat ../ 把bin目录的文件加执行权限 cd /data/mycat/bin chmod +x * 把所需的jar复制到mycat /lib 目录 cd /data/mycat/lib/ cp /data/tools/mycat2-1 .21-release-jar-with-dependencies.jar ./ |
1.3 修改数据源
1 2 3 4 | 注意只修改红色字体内容 cd /data/mycat/conf/datasources 把mycat带的数据源配置正确 vim prototypeDs.datasource.json |
{ "dbType":"mysql", "idleTimeout":60000, "initSqls":[], "initSqlsGetConnection":true, "instanceType":"READ_WRITE", "maxCon":1000, "maxConnectTimeout":3000, "maxRetryCount":5, "minCon":1, "name":"prototypeDs", "password":"123456", "type":"JDBC", "url":"jdbc:mysql://localhost:3306/test?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8", "user":"root", "weight":0 }
1.4 mycat启动
二、配置文件详解(重置/*+ mycat:resetConfig{} */;)(重新加载配置/*+mycat:loadConfigFromFile{} */)
2.1 服务(server)
1 | vim /data/mycat/conf/server .json |
2.2 用户(user)
2.2.1mycat命令方式创建用户
1 2 3 4 5 6 | /*+ mycat:createUser{ "username" : "mycat" , "password" : "123456" , "ip" :NULL, "transactionType" : "xa" } */; |
2.2.2 删除用户
1 2 3 | /*+ mycat:dropUser{ "username" : "mycat" , } */; |
2.2.3 查询用户信息
1 2 3 | /*+ mycat:dropUser{ "username" : "mycat" , } */; |
2.3 数据源(datasource)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | { "dbType" : "mysql" , "idleTimeout" :60000, "initSqls" :[], "initSqlsGetConnection" : true , "instanceType" : "READ_WRITE" , "maxCon" :1000, "maxConnectTimeout" :3000, "maxRetryCount" :5, "minCon" :1, "name" : "prototypeDs" , "password" : "123456" , "type" : "JDBC" , "url" : "jdbc:mysql://localhost:3306/test?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8" , "user" : "root" , "weight" :0 } |
2.3.1 创建数据源
1 2 3 4 5 6 | /*+ mycat:createDataSource{ "name" : "dr0" , "url" : "jdbc:mysql://192.168.0.160:3306/?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true" , "user" : "root" , "password" : "123456" } */; |
2.3.2 删除数据源
1 2 3 4 5 6 | /*+ mycat:dropDataSource{ "name" : "dr0" , "url" : "jdbc:mysql://10.0.9.32:3306/?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true" , "user" : "root" , "password" : "" } */; |
2.3.3 查看数据源信息
1 | /*+ mycat:showDataSources{} */; |
2.4 集群(cluster)
{ "clusterType":"MASTER_SLAVE", "heartbeat":{ "heartbeatTimeout":1000, "maxRetry":3, "minSwitchTimeInterval":300, "slaveThreshold":0 }, "masters":[ "prototypeDs" ], "maxCon":200, "name":"prototype", "readBalanceType":"BALANCE_ALL", "switchType":"SWITCH" }
2.4.1 创建和查看集群
1 2 3 4 | /*! mycat:createCluster{ "name" : "prototype" , "masters" :[ "prototypeDs" ], "replicas" :[ "dr0" ]} */; /*+ mycat:showClusters{} */; |
2.5 逻辑表(schema)
#指定db2逻辑库默认的targetName, mycat会自动加载db2下已经有的物理表或者视图作为单表.
/*+ mycat:createSchema{ "customTables":{}, "globalTables":{}, "normalTables":{}, "schemaName":"db2", "shardingTables":{}, "targetName":"prototype" } */;
三、myat读写分离(具体再这)
https://blog.csdn.net/qq_34988304/article/details/134425977
四、mycat分库分表
4.1 全局表(将数据写入所以分片)
4.2 分库分表
4.3 ER表的分库分表
五、分库分表算法
5.1 取模hash
1 2 3 4 5 | create table travelrecord ( .... ) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by MOD_HASH (id) dbpartitions 6 tbpartition by MOD_HASH (id) tbpartitions 6; |
5.2 范围hash
[数据分片]HASH型分片算法-RANGE_HASH
RANGE_HASH
RANGE_HASH(字段1, 字段2, 截取开始下标)
仅支持数值类型,字符串类型
当时字符串类型时候,第三个参数生效
计算时候优先选择第一个字段,找不到选择第二个字段
如果是字符串则根据下标截取其后部分字符串,然后该字符串hash成数值
根据数值按分片数取余
要求截取下标不能少于实际值的长度
两个字段的数值类型要求一致
1 2 3 4 5 | create table travelrecord( ... )ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by RANGE_HASH(id,user_id,3) dbpartitions 3 tbpartition by RANGE_HASH(id,user_id,3) tbpartitions 3; |
5.3 UNI_HASH字符串
HASH型分片算法-UNI_HASH
UNI_HASH
如果分片值是字符串则先对字符串进行hash转换为数值类型
分库键和分表键是同键
分库下标=分片值%分库数量
分表下标=(分片值%分库数量)*分表数量+(分片值/分库数量)%分表数量
分库键和分表键是不同键
分表下标= 分片值%分表数量
分库下标=分片值%分库数量
1 2 3 4 5 | create table travelrecord ( .... ) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by UNI_HASH (id) dbpartitions 6 tbpartition by UNI_HASH (id) tbpartitions 6; |
5.4 YYYYDD
HASH型分片算法-YYYYDD
YYYYDD
仅用于分库
DD是一年之中的天数
(YYYY*366+DD)%分库数
1 2 3 4 5 | create table travelrecord ( .... ) ENGINE=InnoDB DEFAULT CHARSET=utf8 dbpartition by YYYYDD(xxx) dbpartitions 8 tbpartition by xxx(xxx) tbpartitions 12; |
5.5 各种类型算法对比
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~