MyCat初步介绍

Mycat知识

一、什么是Mycat?能干什么?

属于是一种分库分表的数据库中间件,常用于解决高并发高访问量情况下对数据库的压力,解决java应用与数据库之间的紧耦合问题,解决读写请求不一致问题(一个mycat的逻辑数据库包含物理数据库)

用于

  • 读写分离(由mycat控制数据库的读写)在这里插入图片描述

  • 数据分片(垂直拆分和水品拆分),也就是分库分表

    • 垂直拆分
      • 分库:将一个数据库拆分成多个库,一般按照业务拆分到专库,也就是专库专用
      • 分表:将一张大表分拆成多个小表
    • 水平拆分
      • 分库:把同一张表的数据按照主键的一定规则拆分到不同的数据库中,每个数据库只有这张表的部分数据
      • 分表:将一张表中的数据分拆到一个数据库中的多张表中,每张表存储一部分数据
  • 多数据源整合

二、Mycat和其他数据库中间件的对比

功能Sharding-jdbcMycat
基于客户端还是服务端客户端服务端
分库分表
MySQL交互协议JDBC Driver前后端均用NIO
支持的数据库任意任意

三、Mycat原理

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

四、Mycat的安装

Linux下的软件安装方式

1、rpm安装

  • 需要.rpm安装包,如果存在多个.rpm安装包,需要按照顺序安装

2、yum安装

  • 需要联网,通过下载网址

3、解压后即可使用

4、解压后编译安装

Mycat使用第三种方式

#将Mycat安装包上传到Linux系统中
#tar -zxvf 安装包.tar.gz
#将解压之后的文件copy到/usr/local目录中,cp -r 文件夹名称 /usr/local/

Mycat三个配置文件很重要

  • schema.xml:定义逻辑库,表、分片节点等信息
  • rule.xml:定义分片规则(比如表水平拆分规则等)
  • server.xml:定义用户 以及系统相关变量,比如端口等信息

五、Mycat的启动

#控制台启动
	去到Mycat/bin 目录下执行./mycat console  这种方式能看到输出日志,方便定位问题
	
#后台启动
	去到Mycat/bin 目录下执行./mycat start

六、Mycat的登录

#登录后台管理窗口,此登录方式用于管理维护Mycat
mysql -u用户名 -p密码 -P 9066(这个端口是管理窗口) -h 地址

#登录数据窗口
mysql -u用户名 -p密码 -P 8066 -h 地址

七、搭建Mycat的读写分离

#通过Mycat和Mysql的主从复制配合搭建数据库的读写分离

#一主一从
	#搭建MySQL的数据库主从复制
		1、主机配置
		#修改配置文件:vim /etc/my.cnf
			#主服务器的ID
			server-id=1
			#启动二进制日志
			log-bin=mysql-bin
			#设置不要复制的数据库(可设置多个)
			binlog-ignore-db=mysql
			binlog-ignore-db=information_schema
			#设置需要进行复制的数据库
			binlog-do-db=需要复制的主数据库名字
			#设置logbin格式
			binlog_format=STATEMENT
		2、从机配置
		#同样修改配置文件:vim /etc/my.cnf
			#从服务器的ID
			server-id=2
			#启用中继日志
			relay-log=mysql-relay
		3、主机从机重启服务
			centOS7:systemctl restart mysqld
			#查看当前mysql的状态
			systemctl status mysqld
		4、主机从机都关闭防火墙
			#查看防火墙状态
			systemctl status firewalld
		5、在主机上建立账户并授权slave
			#在主机MYSQL里执行授权命令
			GRANT REPLICATION SLAVE ON *.* TO '用户名'@'%' IDENTIFIED BY '密码'
			#查询master状态
			show master status;
			#记录下File和Position的值
			#执行完此步骤之后不要在操作主服务器MYSQL,防止主服务器状态值改变
		6、在从机上配置需要复制的主机
			#复制主机的命令
			CHANGE MASTER TO MASTER_HOST='主机IP地址',
			MASTER_USER='之前建立并且授权的用户',
			MASTER_PASSWORD='密码',
			MASTER_LOG_FILE='mysql-bin.具体数字',
			MASTER_LOG_POS='具体值';
			#如果之前设置过主机信息,需要重一下
			stop slave
			reset master
		7、启动从服务器复制功能
			start slave
		8、查看从服务器状态
			show slave status\G;
			需要slave_IO_running:yes
			slave_sql_running:yes
	#实现mycat的读写分离
		1、修改Mycat的配置文件:vim /usr/local/mycat/conf/schema.xml
			<schema>配置逻辑库信息
			<dataNode>配置数据源信息,database是数据源的物理数据库名称
			<dataHost>数据源的主机信息
			<writeHost>写主机信息
			<readHost>读主机信息
			为了方便验证是否实现了读写分离我们在在数据库插入主机名,这样由于主从复制的格式导致主从数据不一致
			insert into mytable values(1,@@hostname)
			#要使得读写分离需要修改<dataHost>节点的balance属性,通过此属性配置读写分离的属性
			balance='0',不开启读写分离机制,所有读请求都发送到当前可用的writeHost上
			balance='1',全部的readHost与stand by writeHost参与select语句的负载均衡,简单说 ,当双主双从(M1->S1,M2->S2,并且M1和M2互为主备),正常情况下,S1,M2,S2都参与select语句的负载均衡
			balance='2',所有读操作都随机在writeHost、readHHost上分发
			balance='3',所有读请求随机的分发到readHost执行,writeHost不负担读压力
		2、在只存在2台机器时,一般使用3,但是双主双从时一般使用1
		
		
#双主双从
	#搭建双主双从
        #M1->S1,M2->S2,M1和M2互为主备(在主机宕机,主备之间可以切换)
        1、将之前从机设置的从机配置重置并且删除从机中的表
            stop slave
            reset master
        2、在之前的master1的基础上修改配置文件:vim /etc/my.cnf
            #在作为从数据库的时候,写入操作也需要更新二进制日志文件
            log-slave-updates
            #表示自增长字段每次递增的量,指自增字段的起始值,其默认是1,取值范围是1....65535
            auto-increment-increment=2
            #表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1...65535
            auto-increment-offset=1
        3、修改另一台主机的配置:vim /etc/my.cnf
            同第一台主机的配置差不多,只有两个地方不同
            #server-id=3(这个每台需要唯一)
            #auto-increment-offset=2(起始值需要为2,不能同第一台主机一致)
        4、修改第一台从机的配置:vim /etc/my.cnf
                #从服务器的ID
                server-id=2
                #启用中继日志
                relay-log=mysql-relay
        5、修改第二台从机配置:vim /etc/my.cnf
                #同上,但是server-id需要不同,保持唯一
        6、重启每台服务器,并且关闭防火墙
        7、在两台主机上都建立账户并授权slave,之前M1已经建立就不需要了,只需要给M2建立即可
        8、在每台从机上配置需要复制的主机(同一主一从的第6步)
        9、配置两个主机相互复制
            #同样配置需要复制的机器(同一主一从的第6步),但是注意IP要更改,以及对应的File和pos要正确
	#mycat双主双从读写分离
		1、修改Mycat的配置文件:vim /usr/local/mycat/conf/schema.xml
			#将双主双从的服务器机器配置好,因为只有一个逻辑库,所以<schema>节点、<dataNode>节点、<dataHost>节点不用动只需要增加<writeHost>节点、<readHost>
			#将balance属性值更改为1
			#还有几个属性值需要注意
				writeType='0':所有写操作发送到配置的第一个writeHost,第一个挂了切换到还生存的第二个
				writeType='1':所有写操作都随机发送到配置的writeHost,1.5之后废弃不用
			#writeHost挂了重新启动后以切换的为准,切换记录在配置文件中:dnindex.properties
				switchType='1':默认值,自动切换
				switchType='-1':不自动切换
				switchType='2':基于mysql主从同步的状态决定是否切换
		2、启动mycat验证
			

MySQL的binlog日志的三种格式

  • statement:默认的格式,会将所有写操作sql写入到日志,但是如果写操作包含的时间字段是采用系统时间now()的话,会导致主从数据不一致
  • row:不记录写操作sql,而是记录的是每一行的改变,但是当表中字段全部更新并且字段较多,会使得日志太长
  • mixed:针对上述两种的智能选择,当sql中存在系统函数,就采用row,没有就使用默认格式,但是mixed不能识别系统变量@@hostname
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值