Mycat学习笔记day01

本文详细介绍了Mycat数据库中间件的背景、功能、原理及安装,重点阐述了Mycat如何实现读写分离、数据分片(水平切分和垂直切分)以及全局序列号的配置和优缺点。通过实例展示了Mycat在数据库管理中的应用,适合数据库架构设计和运维人员学习。
摘要由CSDN通过智能技术生成

认识Mycat

1、Mycat背景

Mycat的前身是阿里巴巴大名鼎鼎的Cobar,Cobar在开源了一段时间后,就没有再维护了,阿里巴巴放弃了该项目,再加上Cobar在使用过程中也发现存在一些问题。2013年国内一批开源软件爱好者对Cobar这个项目进行了改进,并命名为Mycat,这就是MyCat的诞生。MyCat是完全免费开源的,不属于任何商业公司。Mycat于2014年首次在上海的《中华架构师》大会上对外宣讲,随后越来越多的项目采用了Mycat。截至2015年11月,超过300个项目采用Mycat,涵盖银行、电信、电子商务、物流、移动应用、O2O的众多领域和公司。Mycat官网:http://www.mycat.io/

2、Mycat是什么

Mycat是一个开源数据库中间件,是一个实现了MySQL协议的数据库中间件服务器,可以看作是一个数据库代理,用MySQL客户端工具和命令行访问Mycat,而Mycat再使用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,包括SQLServer、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储;一般地,Mycat主要用于代理MySQL数据库,虽然它也支持去访问其他类型的数据库;Mycat的默认端口是8066,一般地,我们可以使用常见的对象映射框架比如MyBatis操作Mycat。

3、 Mycat主要能做什么

3.1.数据库的读写分离

通过Mycat可以实现写数据时操作主数据库读数据时操作从数据库,这样能有效减轻数据库压力,也能减轻IO压力。
实现读写分离,当主数据库故障后,Mycat自动切换到另一个住主数据库上,进而提高可用的数据库服务,当然我们需要部署多住多从的模式。
在这里插入图片描述

3.2.数据分片

3.2.1. 水平切分(横向切分)

根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库服务器上,一张表里的数据分散到多个表里面,按照年、月、日分表

3.2.2. 垂直切分(纵向切分)

按照不同的表来切分不同数据库服务器之上
一个数据库里面的多个表分散到多个数据库里面(分库)

3.2.3. 结论
  • 性能有了瓶颈,可以进行读写分离
  • 数据库容量有了瓶颈,可以分库分表

3.3. 多数据源整合

能整合MySQL,Oracle,DB2,Redis等数据库

4、 原理

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

5、 Mycat安装

上传到software目录下执行

yum install -y java-1.8.0-openjdk-devel.x86_64

tar –zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

6、 Mycat日常管理

6.1. Mycat启动

切换到mycat的bin路径下,执行

./mycat start

6.2. Mycat关闭

切换到mycat的bin路径下,执行

./mycat stop

6.3. Mycat命令行

登录mycat命令行,使用mysql的命令行工具来操作的:

mysql -umycat -p -P8066 -h127.0.0.1

mycat默认数据访问端口是8066

7、 MyCat核心配置文件

7.1. server.xml

常用配置:

Ø 配置序列生成方式

Ø 配置mycat逻辑数据库,表 分片

Ø 配置mycat的访问账户和密码

7.2. schema.xml

用于配置的逻辑数据库的映射、表、分片规则、数据结点及真实的数据库信息;

常用配置:

Ø 配置逻辑库映射

Ø 配置垂直切分的表

Ø 配置真实的数据库

Ø 配置读写结点

7.3. rule.xml

定义分片规则

8、Mycat读写分离

8.1. 配置server.xml文件

在这里插入图片描述

8.2. 配置schema文件

在这里插入图片描述

8.3. 注意事项

需要修改server.xml和schema.xml配置文件的权限

chmod server.xml

在这里插入图片描述

8.4. 配置说明

只做读写分离,不做分库分表,Mycat只是帮我们转发一下请求,读转发到从库,写转发到主库,则schema标签里面不用配置table给schema标签加上属性dataNode,配置dataNode的名字(name)

8.4.1. 最终配置如下
<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"/>
8.4.2. 配置dataNode

dataNode定义了Mycat中的数据节点,也就是我们通常说所的数据分片,一个dataNode标签就是一个独立的数据分片,通俗理解,一个分片就是一个物理数据库

Ø name

定义数据节点的名字,这个名字需要是唯一的,这个名字在schema里面会使用到;

Ø dataHost

用于定义该分片属于哪个数据库实例的,属性值是引用dataHost标签上定义的name属性

Ø database

用于对应真实的数据库名,必须是真实存在的;

最终配置如下

<dataNode name="dn1" dataHost="localhost1" database="test" />
8.4.3. 配置dataHost

定义具体的数据库实例、读写分离配置和心跳语句;

配置说明

Ø balance属性

负载均衡类型,目前的取值有4种:

n balance=“0”, 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上;

n balance=“1”,全部的readHost与stand by writeHost参与select语句的负载均衡,简单的说,当双主双从模式(M1->S1,M2->S2,并且M1与 M2互为主备),正常情况下,M2,S1,S2都参与select语句的负载均衡。

n balance=“2”,所有读操作都随机的在writeHost、readhost上分发

n balance=“3”,所有读请求随机的分发到wiriterHost对应的readhost执行,writerHost不负担读压力

Ø writeType

已过时,1.6版本就不用了

Ø switchType属性

用于指定主服务器发生故障后的切换类型

-1 表示不自动切换

1 默认值,自动切换(推荐)

2 基于MySQL主从同步的状态决定是否切换

3 基于MySQL galary cluster的切换机制(适合集群)(1.4.1)

通常情况下,我们MySQL采用双主双从的模式下,switchType为1即可。因为双主从模式下,主从同步关系很复杂,不能根据MySQL的状态来切换。只需要在一个主出问题后,切换到另外的主。

Ø heartbeat标签

用于和后端数据库进行心跳检查的语句,检测MySQL数据库是否正常运行

当switchType为1时,mysql心跳检查语句是select user()

当switchType为2时,mysql心跳检查语句是show slave status

当switchType为3时,mysql心跳检查语句是show status like ‘wsrep%’

Ø writeHost与readHost标签

这两个标签都指定后端数据库的相关配置给mycat,用于实例化后端连接池。唯一不同的是,writeHost指定写实例、readHost指定读实例,组合这些读写实例来满足系统的要求。

在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,由于这个writeHost宕机系统会自动的检测到,并切换到备用的writeHost上去。

8.5. 测试读写分离

1.确保已经打开2台mysql服务

并验证2台机器 主从复制已经起作用

2.启动Mycat

3.Navicat连接mycat

mycat默认数据访问端口是8066

4.创建dept表,插入数据,各个数据库都会存在 说明实现了主从复制

create table dept(

id int(10) primary key AUTO_INCREMENT,

name varchar(20)

);

insert into dept(id,name) values(1,"development");

说明写操作在3307上执行的 然后通过主从复制copy到3308

5.修改从库数据 添加3308数据信息

6.SQL语句验证


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值