mycat是什么_mycat 安装 分表 分库 读写分离

简单的 理解 一下 mycat :如图 mycat 是一个 连接数据库的中介。一个独立安装的 工具,他连接着真实的数据库,并且 把自己伪装成一个数据库。

  程序连接 mycat ,mycat 连接 到真实 数据库。 mycat 这个中介 帮我们管理者分布式事务,数据切片,主从数据库。 在我们程序 看到的只是 逻辑数据库里面的 逻辑表。我们可以直接使用 jdbc 对他进行操作。就像正常的单表一样。 mycat 来管理 数据切片,主从,分布式事务问题。

实测 navicat formysql 11.0.9 可以连接mysql。

或者 命令行连接: mysql -uroot -P8066 -h127.0.0.1

a1dda06b46ad33affa2e869a00c72106.png

centos mycat 安装:

1 下载: whet http://dl.mycat.io/1.6.6.1/Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz

2 解压:   tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

3 启动: cd mycat/bin

    ./mycat start

  备注: mycat 是 Java写的

  查看 mycal 进程是否 正常启动 :ps -ef|grep mycat

  备注2: mycat 是Java写的 ,需要安装jdk 安装方法: https://www.cnblogs.com/cxygg/p/9374475.html

4 停止 mycat : ./mycat stop

mycat 配置文件位于congif 下面:

  最重要的三个文件:server.xml , schema.xml ,rule.xml

server.xml 配置 这 mycat 的 端口,用户名 密码。 和 用户名 下面有哪些逻辑数据库等全局的 配置。

schema.xml 里面配置着 逻辑数据库 下面有哪些逻辑表,逻辑表 存放数据的数据节点 在哪里。逻辑表是用干什么规则 来给数据分片的。

rule.xml 定义了一下 数据库分切片 规则,这些规则被 schema.xml 引用。

要让 mysql 跑起来 ,需要两个东西 第一 Java, 第二 需要真实的数据库。 比如一个mysql 。

mycat 的默认端口是 8066

下面 我们简单的见一下mycat 的 默认配置:

下面的配置位于:server.xml 里面

bdd3695365e22353020307e7a359a000.png

入上图:我们可以直接在 工具中连接它。( 这时候 mycat 还么有真实的 连接到 mysql )

7214f03eeead1b7534a64811a9719460.png

下面 看一下 schema.xml 表:

5582441ea6fad943764d68ff2d8f7441.png

备注: 可以直接给 逻辑数据库指定 一个数据节点,相当于给每个表都使用同样 的 数据节点。这种方式不支持数据切片,也就是说分库没法用了。只能 在 host上面做

rule.xml 里面配置 的 规则:

8de4ade05ffbfb4437ede45b9e5c4d12.png
b6ce30591986edee2ec22b661d740e1d.png
decba9dd104f0702885b848b4118d296.png

上面的这种 相当于 根据枚举值决定分到哪个分区, 10000 这个枚举值去 0 的 数据节点,10010这个 枚举 去1 的 数据节点。

配置把数据节点指向到mysql以后,启动 mycat ,就能看到这些 逻辑表了。

dfb1136770275b4c2b3998e47532ee4c.png

这些都是逻辑表:不是真实存在的。 建表语句创建表

89263c57f050aa03c5193eba9605961b.png
执行:create table travelrecord (id bigint not null primary key,user_id varchar(100),traveldate DATE, fee decimal,days int);然后 三个数据 节点都存在了这张表。(  数据节点的  数据库 需要提前创建 )
47912cb38d702218d5b33c1f503b961f.png

后面就可以正常 查询,插入修改了。 和 直接使用mysql 一样。

在 sql 前面 加 EXPLAIN 可以看 sql 被 是在哪个数据节点执行的:

27150be9b95967a60c3f856841baaf54.png

分库: mycat 的 分库是利用 一个逻辑数据库 指定 多个数据节点, 然后不同数据节点对应不同的 数据库。 并且 这些数据库中的 表不一样。

14b223a7af61599aa0adb545e6f91ca8.png

   逻辑数据库db 分成 db1 和 db2 两个真实数据库

主从读写分离:mycat 主从是在 数据节点那一层来实现的。 一个数据节点,对外开 配置 读主机,和写主机。 mycat 支持 多主多从,但是 mycat 的 多主是以 个主写,其他的主在主节点挂了才提供些的功能,正常情况下这些主 ,可以用于 读节点 存在。( 需要设置 balance )

  主1 从1 从2

  主备1 主备从1 主备从2  主备1 和 主 不会 同事提供写功能

  备注: 我说的 主备是指的 可写节点 的备用写节点,而不是 主从关系。


分表:mycat 的 分表,事垮库的分表。 不支持在同一个数据库 分表( 至少目前 我没有发现),mycat 的 分表 是吧一张表 分到 多个数据库中,(这个功能貌似 1.6 提供的 )

  比如 逻辑表user ,分到 db1.user 和 db2.user 支持

  比如 逻辑表user ,分到 db1.user1 和 db1.user2 不支持 (sharding sphere 有这个功能)

dd15035291a2b2bdb980b6882f25ad64.png

mycat 的 逻辑表的类型 有两种 在table 标签中用 type=global 指定为全局表,不写,普通表。

  普通表: 正常的需要分库的表

  全局表:每个库里面都有,而且是每个库都有完整的一样的这张表,任何修改操作都是 所有库都修改,查询 去其中一个查询。 全局表 可以和任意一个库的任意表join。 全局表一般用于,修改不频繁 ,数据量小的 表。

最后说一句。mycat 2016 年以后 基本就没什么 更新,慎用。 1.6.0 版本 是 2016 年发布的, 2018 年 发布了 1.6.6 版本。 和当年的 dubbo 一样 ,几年没更新,然后 spring cloud 占领了市场,虽然 dubbo 目前 捐给 Apache 了,有人更新和维护,但是 感觉已经 干不过 cloud 了。 mycat 可能 会被 sharding sphere 之类的东西 干死。 个人观点 mycat 设计理念 比 sharding sphere 好, mycat 作为 一个 数据库中间件,或者说 就是一个数据库中介。开发者完全不用关心主从 同步的问题,但是 sharding sphere 主从不同步的 处理的 需要程序员 自己考虑,有些时候 为了避免 主从同步 读到 从库,需要强制使用主库。 sharding sphere 说的在一个线程中 写入了数据,后面都会自动使用主库,但是实际体验在 spring 事物嵌套 ,有复制 事物传播机制的 时候,这个经常还是读的从库。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值