随笔 - 19  文章 - 0  评论 - 0  阅读 - 1574

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 各种类型算法对比

 

  

 

 

posted on   leiyunfeng  阅读(148)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示