Mycat读写分离的简单实现
1、Mycat读写分离的配置
1.1、Mycat是什么
Mycat是一个开源数据库中间件,是一个实现了MySQL协议的的数据库中间件服务器,我们可以把它看作是一个数据库代理,用MySQL客户端工具和命令行访问Mycat,而Mycat再使用用MySQL原生(Native)协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,包括SQL Server、Oracle、DB2、PostgreSQL等主流数据库,也支持MongoDB这种新型NoSQL方式的存储,未来还会支持更多类型的存储。
1.2、Mycat能干什么
1.2.1、数据库的读写分离
1、通过Mycat可以自动实现写数据时操作主数据库,读数据时操作从数据库,这样能有效地减轻数据库压力,也能减轻IO压力。
2、实现读写分离,当主出现故障后,Mycat自动切换到另一个主上,进而提供高可用的数据库服务,当然我们需要部署多主多从的模式
1.2.1.1、数据库读写分离图解
这里是一主一从的图解

1.2.2、数据库分库分表
分库分表指的是对数据库数据的拆分,分为两种:水平拆分和垂直拆分
1.2.2.1、水平拆分(分库)
根据表中数据的逻辑关系,将同一个表中的数据按照某种条件拆分到多台数据库服务器上面
1.2.2.2、垂直拆分(分表)
按照不同的表来拆分分到不同的数据库服务器之上,根据表的类型不同来拆分
1.3、Mycat的搭建
1.3.1、前期准备
1、要将Mycat准备好可以去官网下载 http://www.mycat.org.cn/
2、需要两台或者两台以上的服务器或者虚拟机
3、保证每台服务器上已经安装好了mysql并且主从复制已经搭建完成
主从复制搭建可以参考这里:https://blog.csdn.net/qq_45334037/article/details/118708689
1.3.2、搭建环境
主服务器ip:176.20.92.71
从服务器ip:176.20.92.73
Mycat版本:1.6.7.1
MySQL版本:5.7.18
Linux版本:centos7
1.3.3、Mycat的安装启动关闭
1、Mycat解压即用
将Mycat解压到/usr/local目录下
2、启动Mycat 需要切换到Mycat中的bin目录下
./mycat start
3、登录mycat 需要进入mysql中的bin目录下
./mysql -umycat -p -P8066 -h127.0.0.1
4、Mycat的关闭
./mycat stop
1.3.4、Mycat的配置文件
- server.xml: 用于配置mycat所需要的服务器信息。常用于配置:
1、配置序列生成方式
2、配置mycat逻辑数据库
3、配置mycat的访问账户和密码 - schema.xml: 用于配置的逻辑数据库的映射、表、分片规则、数据结点及真实的数据库信息。常用于配置:
1、配置逻辑库映射
2、配置垂直切分的表
3、配置真实的数据库
4、配置读写结点 - rule.xml: 用于定义分片规则
1.3.5、server.xml文件的配置
只需设置连接mycat时的用户名和密码, 逻辑库即可,将默认的修改为你想要的
<user name="mycat" defaultAccount="true">
<property name="password">123456</property>
<property name="schemas">mycatdb</property>
</user>
1.3.6、schema.xml文件的配置
1.3.6.1、schema配置
因为只做读写分离,不做分库分表,Mycat只是帮我们转发一下请求,写转发到主库,读转发到从库,所以schema标签里面不用配置table
配置如下
<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
1.3.6.2、dataNode配置
dataNode标签的作用
dataNode定义了Mycat中的数据节点,也就是我们通常说所的数据分片,一个dataNode标签就是一个独立的数据分片,通俗理解,一个分片就是一个物理数据库
配置如下
<dataNode name="dn1" dataHost="host1" database="testdb" />
name属性:定义数据节点的名字,这个名字需要是唯一的,这个名字在schema里面会使用到
dataHost属性:用于定义该分片属于哪个数据库实例的,属性值是引用dataHost标签上定义的name属性
database属性:用于对应真实的数据库名,必须是真实存在的
1.3.6.3、dataHost配置
dataHost标签的作用
定义具体的数据库实例、读写分离配置和心跳语句
配置如下
<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="176.20.92.71:3306" user="root" password="123456">
<readHost host="hostS1" url="176.20.92.73:3306" user="root" password="123456" />
</writeHost>
</dataHost>
balance属性:负载均衡类型,目前的取值有4种
switchType属性:用于指定主服务器发生故障后的切换类型
heartbeat标签:用于和后端数据库进行心跳检查的语句,检测MySQL数据库是否正常运行
writeHost标签:将后端的数据库的相关配置给mycat,用于实例化后端连接池,写实例
readHost标签:将后端的数据库的相关配置给mycat,用于实例化后端连接池,读实例
在一个dataHost内可以定义多个writeHost和readHost。但是,如果writeHost指定的后端数据库宕机,那么这个writeHost绑定的所有readHost都将不可用。另一方面,由于这个writeHost宕机系统会自动的检测到,并切换到备用的writeHost上去
1.3.6.4、完整配置
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="mycatdb" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
</schema>
<dataNode name="dn1" dataHost="host1" database="testdb" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="0"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<writeHost host="hostM1" url="176.20.92.71:3306" user="root" password="123456">
<readHost host="hostS1" url="176.20.92.73:3306" user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
在此我们的mycat读写分离配置就全部完成了,重启mycat进行测试
1.4、读写分离测试

在mycat中的逻辑数据库mycatdb的t_user表中插入数据 可以发现主从数据库都被插入了数据

在mycat中查询t_user中的数据

到此mycat读写分离的搭建和测试就全部完成了
Mycat读写分离的简单实现的更多相关文章
- mysql主从同步+mycat读写分离+.NET程序连接mycat代理
背景 最近新项目需要用到mysql数据库,并且由于数据量大的原因,故打算采用1主1从(主数据库负责增.删.改操作:从数据库负责查操作)的数据库架构,在实现主从之后还要实现读写分离的代理,在网上搜寻了很 ...
- MyCat读写分离-笔记(四)
概述 Mycat能够实现数据库读写分离,不能实现主从同步,数据库的备份还是基于数据库层面的.Mycat只是数据库的中间件: Mycat读写分离配置 在MySQL中间件出现之前,对于MySQL主从集群, ...
- MyCat读写分离、分库分表
系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...
- Mycat读写分离、主从切换、分库分表的操作记录
系统开发中,数据库是非常重要的一个点.除了程序的本身的优化,如:SQL语句优化.代码优化,数据库的处理本身优化也是非常重要的.主从.热备.分表分库等都是系统发展迟早会遇到的技术问题问题.Mycat是一 ...
- mycat读写分离与主从切换【转】
什么是mycat,以及mycat的优点和特性本文不做赘述,本文继续本着实战的态度,来分享一些个人对mycat的基础功能实践.本文mycat的读写分离和主从切换的环境为mysql主从环境. 如何安装my ...
- Mycat 读写分离
简介 Mycat 是 MySQL中间件,Mycat的原理中最重要的一个动词就是'拦截',它拦截了用户发送过来的SQL语句,首先对SQL语句做了一些特定的分析:如分片分析.路由分析.读写分离分析.缓存分 ...
- mycat数据库集群系列之mycat读写分离安装配置
最近在梳理数据库集群的相关操作,现在花点时间整理一下关于mysql数据库集群的操作总结,恰好你又在看这一块,供一份参考.本次系列终结大概包括以下内容:多数据库安装.mycat部署安装.数据库之读写分离 ...
- Mysql之Mycat读写分离及分库分表
## 什么是mycat ```basic 1.一个彻底开源的,面向企业应用开发的大数据库集群 2.支持事务.ACID.可以替代MySQL的加强版数据库 3.一个可以视为MySQL集群的企业级数据库,用 ...
- web 项目 连接mycat 读写分离失效问题,
问题描述:mycat 读写分离已配好,在sql工具上查询操作是可以的,但是在项目中,读数据就走write 数据库, 解决 :环境spring +mvc +ibaites,在java中自己写j ...
随机推荐
- TensorRT-优化-原理
TensorRT-优化-原理 一.优化方式 TentsorRT 优化方式: TensorRT优化方法主要有以下几种方式,最主要的是前面两种. 层间融合或张量融合(Layer & Tensor ...
- thymeleaf+Springboot实现自定义标签
在项目开发中,有一些组件不能满足我们快速开发的要求,我们需要封装一些组件来更加的便利我们.比如,我们可以封装一个下拉框组件,只要开发人员只有引用这个组件的标签,就能出现效果,而不用再去请求url,渲染 ...
- 无网络的win10电脑之间实现相互共享文档
产生需求的原因: 之前做过在有网的情况下,两台win10的电脑怎么在不使用任何第三方软件的情况下实现两者之间的文件共享,但是在完成之后,我猛然间想到一种情况,那就是如果两台wiin10的电脑如果没有网 ...
- Floyd最短路及路径输出
引例 下图表示城市之间的交通路网,线段上的数字表示费用.如图,求$V_{1}$→$V_{n}$最短路径长度及路径 样例数据 输入 10 0 2 5 1 0 0 0 0 0 0 0 0 0 0 12 1 ...
- 又见 xcrun: error: invalid active developer path 错误
每次升级完macOS都会被 Xcode command line tools missing xcrun 问候一遍,也是挺烦的. 这个春节过光顾着吃喝玩乐,过的蛮颓废的,感觉再也追不上朋友圈各位大佬了 ...
- 「模拟8.29」chinese(性质)·physics·chemistry(概率期望)
T1 chinese 根据他的问题i*f[i]我们容易联想到,答案其实是每种方案中每个点的贡献为1的加和 我们可以转变问题,每个点在所有方案的贡献 进而其实询问就是1-k的取值,有多少中方案再取个和 ...
- 【dp】动归总结
原标题:[DP专辑]ACM动态规划总结 转载自 http://blog.csdn.net/cc_again?viewmode=list http://blog.csdn.net/cc_again/ar ...
- k8s-nginx二进制报Illegal instruction (core dumped)
1.环境 系统:CentOS 7.3 内核:x86 环境:虚拟机 2.问题 收到一个现场问题,k8s环境中nginx的pod都启动异常. #kubectl get pod |grep nginx ng ...
- 【odoo14】【开发侧】权限配置
欢迎转载,但需标注出处,谢谢! 说明: 本文面向开发人员,普通用户可参考[odoo14][用户侧]权限配置.文章结构与用户侧一致. 目录 一. odoo中的对象 二. 权限控制 2.1 实现原理 2. ...
- DOS命令行(11)——更多实用的命令行工具
start 启动另一个窗口运行指定的程序或命令,所有的DOS命令和命令行程序都可以由start命令来调用.该命令不仅能运行程序,还能运行协议对应的程序 命令格式:START ["title& ...