Mycat

Mycat

1.概述

  • 1.Mycat是数据中间件
  • 2.中间件:连接软件组件和应用的计算机软件,便于软件和各部件的交互
  • 3.数据中间件:连接Java应用程序与数据库的软件

2.适用场景

  • 1.Java与数据库紧耦合(直接连接)
  • 2.高访问量高并发对数据库压力(集群)
  • 3.读写请求数据不一致(读写分离+主从复制)

3.作用

1.读写分离

在这里插入图片描述

2.数据分片(数据库分布式)

  • 1.垂直拆分(分库-分担数据库IO压力)
  • 2.水平拆分(分表-提高数据的查询效率)
  • 3.垂直+水平拆分(分库分表)

3.多数据源整合

在这里插入图片描述

4.原理

  • Mycat的原理是拦截用户发送的SQL语句,首先对SQL语句进行特定分析(例:分片分析,路由分析,读写分离分析,缓存分析等),然后将此SQL发往后端的真实数据库,并将返回的数据做适当的处理后再返回给用户

5.安装

  • 1.参照MySQL篇中的读写分离的Mycat安装
  • 2.三个配置文件
    • 1.schema.xml:定义逻辑库,表,分片等节点内容
    • 2.rule.xml:定义分片规则
    • 3.server.xml:定义用户以及系统相关变量

6.搭建读写分离

  • 1.Mycat实现读写分离需要和MySQL的主从复制配合搭建(从而实现MySQL的高可用性)
  • 2.读写分离模式
    • 1.一主一从
    • 2.双主双从

读写分离

  • 1.实际生产中,对数据库的读和写都在同一个数据库服务器中,无论是在安全性,高可用性还是高并发等方面都不能满足实际需求
  • 2.因此通过主从复制来同步数据,再通过读写分离来提升数据库的并发负载能力
  • 3.具体操作:让主数据库(master)处理写操作(增删改);从数据库(slave)执行读操作(查询)
    在这里插入图片描述
    在这里插入图片描述
  • 4.作用:提高数据的安全性,分摊压力,提高性能
  • 5.使用中间件:Mycat

1.Mycat简介

  • 1.读写分离的实现方式有多种,通过Mycat中间件可以非常容易的配置出一套读写分离的数据库架构
  • 2.Mycat是alibaba开源的数据库中间件,介于数据库和应用之间,进行数据处理和交互的中间服务
  • 3.Mycat提供了丰富的功能,例:分库分表,集群管理,读写分离
  • 4.使用Mycat时,它负责管理MySQL集群,对使用者屏蔽了集群的存在,对于使用者而言,Mycat就是一个数据库,称为逻辑数据库
    在这里插入图片描述

2.Mycat安装

  • Mycat属于绿色版软件,只需要解压即可(由java编写)

1.安装目录

  • /opt/mycat
    在这里插入图片描述

2.前置条件

  • Mycat基于java,需要先安装jdk

3.下载压缩包并解压缩

[root@localhost mycat]# tar zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz

在这里插入图片描述
在这里插入图片描述

4.配置环境变量

[root@localhost mycat]# vi /etc/profile
export MYCAT_HOME=/opt/mycat/mycat
export PATH=$PATH:$JAVA_HOME/bin:$MYCAT_HOME/bin
[root@localhost mycat]# source /etc/profile

在这里插入图片描述

3.Mycat配置

  • 1.前提:读写分离的前提是主从复制,需要先搭建好MySQL的主从架构
  • 2.将server.xml和schema.xml修改后上传覆盖/opt/mycat/mycat/conf中的对应文件
  • 3.server.xml(修改用户名密码以及数据库名)
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
    	- you may not use this file except in compliance with the License. - You 
    	may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
    	- - Unless required by applicable law or agreed to in writing, software - 
    	distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
    	WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
    	License for the specific language governing permissions and - limitations 
    	under the License. -->
    <!DOCTYPE mycat:server SYSTEM "server.dtd">
    <mycat:server xmlns:mycat="http://io.mycat/">
    	<system>
    	<property name="useSqlStat">1</property>  <!-- 1为开启实时统计、0为关闭 -->
    	<property name="useGlobleTableCheck">0</property>  <!-- 1为开启全加班一致性检测、0为关闭 -->
    
    		<property name="sequnceHandlerType">2</property>
          <!--  <property name="useCompression">1</property>--> <!--1为开启mysql压缩协议-->
            <!--  <property name="fakeMySQLVersion">5.6.20</property>--> <!--设置模拟的MySQL版本号-->
    	<!-- <property name="processorBufferChunk">40960</property> -->
    	<!-- 
    	<property name="processors">1</property> 
    	<property name="processorExecutor">32</property> 
    	 -->
    		<!--默认为type 0: DirectByteBufferPool | type 1 ByteBufferArena-->
    		<property name="processorBufferPoolType">0</property>
    		<!--默认是65535 64K 用于sql解析时最大文本长度 -->
    		<!--<property name="maxStringLiteralLength">65535</property>-->
    		<!--<property name="sequnceHandlerType">0</property>-->
    		<!--<property name="backSocketNoDelay">1</property>-->
    		<!--<property name="frontSocketNoDelay">1</property>-->
    		<!--<property name="processorExecutor">16</property>-->
    		<!--
    			<property name="serverPort">8066</property> <property name="managerPort">9066</property> 
    			<property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> 
    			<property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
    		<!--分布式事务开关,0为不过滤分布式事务,1为过滤分布式事务(如果分布式事务内只涉及全局表,则不过滤),2为不过滤分布式事务,但是记录分布式事务日志-->
    		<property name="handleDistributedTransactions">0</property>
    		
    			<!--
    			off heap for merge/order/group/limit      1开启   0关闭
    		-->
    		<property name="useOffHeapForMerge">1</property>
    
    		<!--
    			单位为m
    		-->
    		<property name="memoryPageSize">1m</property>
    
    		<!--
    			单位为k
    		-->
    		<property name="spillsFileBufferSize">1k</property>
    
    		<property name="useStreamOutput">0</property>
    
    		<!--
    			单位为m
    		-->
    		<property name="systemReserveMemorySize">384m</property>
    
    		<!--是否采用zookeeper协调切换  -->
    		<property name="useZKSwitch">true</property>
    
    	</system>
    
    	<!-- 全局SQL防火墙设置 -->
    	<!-- 
    	<firewall> 
    	   <whitehost>
    	      <host host="127.0.0.1" user="mycat"/>
    	      <host host="127.0.0.2" user="mycat"/>
    	   </whitehost>
           <blacklist check="false">
           </blacklist>
    	</firewall>
    	-->
    
    	<user name="root">
    		<!--登陆mycat的账号密码-->
    		<property name="password">root</property>
    		<!--mycat中显示的数据库名需要和mysql中的数据库名保持一致-->
    		<property name="schemas">myself</property>
    		
    		<!-- 表级 DML 权限设置 -->
    		<!-- 		
    		<privileges check="false">
    			<schema name="TESTDB" dml="0110" >
    				<table name="tb01" dml="0000"></table>
    				<table name="tb02" dml="1111"></table>
    			</schema>
    		</privileges>		
    		 -->
    	</user>
    </mycat:server>
    
  • 4.schema.xml
    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
    	<!--mysql中的数据库名-->
    	<schema name="myself" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"></schema>
    
    	<dataNode name="dn1" dataHost="localhost1" database="myself" />
    	
    	<dataHost name="localhost1" maxCon="1000" minCon="10" balance="3"
    			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
    		<heartbeat>select user()</heartbeat>
    		<!--mysql中的主库的ip+端口号,以及账号密码-->
    		<!--注意如果mycat和主机在同一个服务器上,则url=localhost:3306-->
    		<writeHost host="hostM1" url="192.168.73.100:3306" user="root" password="root">
    			<!--mysql中的从库的ip+端口号,以及账号密码,可以配置多个-->
    			<readHost host="hostS1" url="192.168.73.102:3306" user="root" password="root" />
    			<readHost host="hostS2" url="192.168.73.103:3306" user="root" password="root" />
    		</writeHost>
    	</dataHost>
    
    </mycat:schema>
    
    [root@localhost mycat]# mv schema.xml mycat/conf/
    mv:是否覆盖"mycat/conf/schema.xml"? y
    [root@localhost mycat]# ls
    mycat  Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz  server.xml
    [root@localhost mycat]# mv server.xml mycat/conf/
    mv:是否覆盖"mycat/conf/server.xml"? y
    

4.启动Mycat

# 1.后台启动
[root@localhost mycat]# mycat start
Starting Mycat-server...
# 2.控制台启动
[root@localhost mycat]# mycat console
# 3.登陆数据窗口
[root@localhost mycat]# mysql -u账号 -p密码 -h 192.168.73.100 -P 8066

在这里插入图片描述

5.Navicat连接Mycat

  • 1.ip:mycat服务器所在ip
  • 2.端口号:8066
  • 3.账号密码:server.xml文件中配置
  • 4.注意:如果配置失败,可以查看位于 mycat/logs中的日志文件
    在这里插入图片描述

6.关闭Mycat

# 查看状态
[root@localhost mycat]# mycat status
# 关闭
[root@localhost mycat]# mycat stop
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值