MyCat

MyCat2学习:

一、mycat是什么:

mycat是数据库中间件。
连接java应用程序和数据库

二、为什么要学习mycat:

java与数据库紧耦合。
高访问量高并发对数据库的压力大
读写请求数据不一致

三、mycat能干什么?

1.读写分离:
在这里插入图片描述

2.数据分片
垂直拆分(分库),水平拆分(分表)、垂直拆分+水平拆分(分库分表)
在这里插入图片描述

3.多数据源整合
在这里插入图片描述

四、原理

Mycat的原理中最重要的一个词就是拦截:拦截用户发送过来的SQL语句,首先对SQL语句进行一些特定的分析:如分片分析,路由分析,读写分离分析,缓存分析等,然后将这个SQL发往后端真实的数据库,并将返回的结果做适当的处理,最终返回给用户。
在这里插入图片描述

五、MyCat2安装启动:

把这个jar放进解压的tar中的mycat\lib文件夹下
在这里插入图片描述
把整合好的文件夹拷贝到linux下/usr/local/
修改文件夹及以下文件的权限修改成最高权限,否则运行启动命令时,会因权限不足而报错
在这里插入图片描述

chmod -R 777 mycat
chmod -R 777 wrapper-linux-x86-32
chmod -R 777 wrapper-linux-x86-64
chmod -R 777 wrapper-linux-ppc-64

六、启动

在mycat连接的mysql数据库里添加用户

创建用户,用户名为mycat,密码为123456,赋权限,如下:

CREATE USER 'mycat'@'%'IDENTIFIED BY '123456';

–必须要赋的权限mysql8才有的

GRANTXA_RECOVER_ADMINON*.*TO'root'@'%';

—视情况赋权限

GRANTALLPRIVILEGESON*.*TO'mycat'@'%';flushprivileges;

2、修改mycat的prototype的配置
启动mycat之前需要确认prototype数据源所对应的mysql数据库配置,修改对应的user(用户),password(密码),url中的ip


{
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        "instanceType":"READ_WRITE",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        "name":"prototypeDs",
        "password":"root",
        "type":"JDBC",
        "url":"jdbc:mysql://localhost:3306/mydb1?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8",
        "user":"root",
        "weight":0
}

测试远程访问数据库是否联通:

mysql -uroot -proot -h 192.168.126.129 -P 3306

在这里插入图片描述

七、启动Mycat

linux启动命令

cd /usr/local/mycat/bin/
./mycat start
./mycat stop
./mycat status
./mycat console
./mycat restart

八、登录

登录后台管理窗口
此登录方式用于管理维护Mycat

mysql -uroot -proot -P 9066

登录数据窗口
此登录方式用于通过Mycat查询数据,我们选择这种方式访问Mycat

mysql -uroot -proot -P 8066

九、MyCat的相关概念:

1、分库分表
按照一定规则把数据库中的表拆分为多个带有数据库实例,物理库,物理表访问路径的分表。
**分表:**一张订单表数据数百万,达到MySQL单表瓶颈,分到多个数据库中的多张表
**分库:**一个电商项目,分为用户库、订单库等等。
2、逻辑库
数据库代理中的数据库,它可以包含多个逻辑表。
解读:Mycat里定义的库,在逻辑上存在,物理上在MySQL里并不存在。有可能是多个MySQL数据库共同组成一个逻辑库。类似多个小孩叠罗汉穿上外套,扮演一个大人。
3、逻辑表
数据库代理中的表,它可以映射代理连接的数据库中的表(物理表)
解读:Mycat里定义的表,在逻辑上存在,可以映射真实的MySQL数据库的表。可以一对一,也可以一对多。
4、物理库
数据库代理连接的数据库中的库
解读:MySQL真实的数据库。
5、物理表
数据库代理连接的数据库中的表
解读:MySQL真实的数据库中的真实数据表。
6、拆分键
即分片键,描述拆分逻辑表的数据规则的字段
解读:比如订单表可以按照归属的用户id拆分,用户id就是拆分键
7、物理分表
指已经进行数据拆分的,在数据库上面的物理表,是分片表的一个分区
解读:多个物理分表里的数据汇总就是逻辑表的全部数据
8、物理分库
一般指包含多个物理分表的库
解读:参与数据分片的实际数据库
9、分库
一般指通过多个数据库拆分分片表,每个数据库一个物理分表,物理分库名字相同
解读:分库是个动作,需要多个数据库参与。就像多个数据库是多个盘子,分库就是把一串数据葡萄,分到各个盘子里,而查询数据时,所有盘子的葡萄又通过Mycat2组成了完整的一串葡萄。
10、分片表,水平分片表
按照一定规则把数据拆分成多个分区的表,在分库分表语境下,它属于逻辑表的一种
解读:安按照规则拆分数据,上个例子中的那串葡萄。
11、单表没有分片,
没有数据冗余的表,
解读:没有拆分数据,也没有复制数据到别的库的表。
12、全局表,广播表
每个数据库实例都冗余全量数据的逻辑表.它通过表数据冗余,使分片表的分区与该表的数据在同一个数据库实例里,达到join运算能够直接在该数据库实例里执行.它的数据一致一般是通过数据库代理分发SQL实现.也有基于集群日志的实现
解读:例如系统中翻译字段的字典表,每个分片表都需要完整的字典数据翻译字段。
13、ER表
狭义指父子表中的子表,它的分片键指向父表的分片键,而且两表的分片算法相同广义指具有相同数据分布的一组表
解读:关联别的表的子表,例如:订单详情表就是订单表的ER表
14、集群
多个数据节点组成的逻辑节点.在mycat2里,它是把对多个数据源地址视为一个数据源地址(名称),并提供自动故障恢复,转移,即实现高可用,负载均衡的组件。
解读:集群就是高可用、负载均衡的代名词
15、数据源
连接后端数据库的组件,它是数据库代理中连接后端数据库的客户端
解读:Mycat通过数据源连接MySQL数据库
16、原型库(prototype)
原型库是Mycat2后面的数据库,比如mysql库
解读:原型库就是存储数据的真实数据库,配置数据源时必须指定原型库

十、MyCat 的配置文件

在这里插入图片描述

十一、搭建读写分离

我们通过Mycat和MySQL的主从复制配合搭建数据库的读写分离,实现MySQL的高可用性。
10.1搭建一主一从
一个主机用于处理所有写请求,一台从机负责所有读请求,架构图如下
在这里插入图片描述
10.1.1、搭建MySQL数据库主从复制
主从复制的原理:
在这里插入图片描述

主机配置:
修改配置文件:

vim /etc/my.cnf

在这里插入图片描述

#主服务器唯一ID
server-id=1
#启用二进制文件
log-bin=chf-bin
#需要复制的数据库
binlog-do-db=mydb1
#设置logbin的格式
binlog_format=STATEMENT

从机配置

修改配置文件:vim/etc/my.cnf

在这里插入图片描述

#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay

重启mysql服务
在这里插入图片描述

systemctl restart mysqld
systemctl status mysqld
#创建从机用户
CREATE USER 'slave1'@'%' IDENTIFIED BY 'root';
ALTER USER 'slave1'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
#赋权限
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'%';
#刷新
flush privileges;
#查看主机的状态
show master status;
#连接主机地址
CHANGE MASTER TO MASTER_HOST='192.168.126.128',
#从机用户
MASTER_USER='slave1',
#从机密码
MASTER_PASSWORD='root',
#日志文件名,开始节点(主机show master status;可以查看)
MASTER_LOG_FILE='chf-bin.000001',MASTER_LOG_POS=1136;
#启动从服务器复制功能
start slave;
#查看从服务器状态
show slave status;

10.1.2、配置mycat读写分离:

#登录Mycat,创建逻辑库,配置数据源
#在Mycat里创建数据库mydb1,创建db2逻辑库
CREATE DATABASE mydb1;

修改配置文件mydb1.schema.json,指定数据源"targetName":“prototype”
在这里插入图片描述

"targetName":"prototype"

在这里插入图片描述
使用注解的方式添加数据源:

#登录Mycat,注解方式添加数据源,指向从机
/*+mycat:createDataSource{"name":"rwSepw","url":"jdbc:mysql://192.168.126.128:3306/mydb1?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true","user":"root","password":"root"}*/;
/*+mycat:createDataSource{"name":"rwSepr","url":"jdbc:mysql://192.168.126.129:3306/mydb1?useSSL=false&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true","user":"root","password":"root"}*/;

#查询配置数据源结果
/*+mycat:showDataSources{}*/;

更新集群信息,添加dr0从节点.实现读写分离

#更新集群信息,添加dr0从节点.
/*!mycat:createCluster{"name":"prototype","masters":["rwSepw"],"replicas":["rwSepr"]}*/;
#查看配置集群信息
/*+mycat:showClusters{}*/;

查看集群文件:

      "clusterType":"MASTER_SLAVE",
        "heartbeat":{
                "heartbeatTimeout":1000,
                "maxRetryCount":3,
                "minSwitchTimeInterval":300,
                "showLog":false,
                "slaveThreshold":0.0
        },
        "masters":[
                "rwSepw"
        ],
        "maxCon":2000,
        "name":"prototype",
        "readBalanceType":"BALANCE_ALL",
        "replicas":[
                "rwSepr"
        ],
        "switchType":"SWITCH"
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值