前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >利用mycat实现mysql读写分离

利用mycat实现mysql读写分离

作者头像
林老师带你学编程
发布2018-01-04 10:36:59
1.1K0
发布2018-01-04 10:36:59
举报
文章被收录于专栏:强仔仔强仔仔

实现mysql读写分离的工具有很多种,我这里就介绍mycat这一种方式。其它的大家有兴趣可以自己去了解。

第一步:首先就是mycat的安装:

这个地址就可以下载安装包:https://github.com/MyCATApache/Mycat-download/tree/master/1.6-RELEASE。下载完之后,就进行解压到系统相应目录,然后点击wrapper-window-x86-32(或者64).exe安装即可。

安装完之后的目录文件结构如下:

第二步:安装好了之后就可以进行mycat和mysql数据库之间的连接配置了:

首先在mycat下面的config中找到schema.xml文件并打开。配置详细信息如下:

配置代码:

代码语言:javascript
复制
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100">
<table name="test" primaryKey="ID" type="global" dataNode="dn1" />
</schema>
<dataNode name="dn1" dataHost="localhost1" database="test" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="localhost:3306" user="linzhiqiang"
password="220316">
<!-- can have multi read hosts
<readHost host="hostS1" url="192.168.73.128:3307" user="linzhiqiang"
password="220316" />
-->
</writeHost>
<writeHost host="hostS1" url="192.168.73.128:3307" user="linzhiqiang"
password="220316" />
</dataHost>
</mycat:schema>

这里面,有两个参数需要注意,balance和 switchType。

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

1. balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost上。

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

3. balance="2",所有读操作都随机的在writeHost、readhost上分发。

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

switchType指的是切换的模式,目前的取值也有4种:

1. switchType='-1' 表示不自动切换

2. switchType='1' 默认值,表示自动切换

3. switchType='2' 基于MySQL主从同步的状态决定是否切换,心跳语句为 show slave status

4. switchType='3'基于MySQL galary cluster的切换机制(适合集群)(1.4.1),心跳语句为 show status like 'wsrep%'。

因此,该配置文件中的balance="1"意味着作为stand by writeHost的hostS1和hostS2将参与select语句的负载均衡,这就实现了主从的读写分离,switchType='-1'意味着当主挂掉的时候,不进行自动切换,即hostS1和hostS2并不会被提升为主,仍只提供读的功能。这就避免了将数据读进slave的可能性,毕竟,单纯的MySQL主从集群并不允许将数据读进slave中,除非配置的是双master。

然后就是mycat用户配置,mycat下面的config中找到server.xml文件并打开。配置详细信息如下:

这里的用户名稍后就会用到,例如利用Navicat连接mycat的时候,就需要用到这个用户名和密码。具体配置信息如下所示(下载好之后就是这个配置文件,如果不想改可以直接用):

第三步:最后就是启动mycat这个服务:

首先在cmd进入mycat的bin目录,然后执行mycat start命令即可启动mycat服务。

具体命令如下所示:

这里需要注意的是,如果配置文件错误,启动就会失败。

第四步:下面就是数据测试阶段了,测试到底能不能通过mycat实现mysql的读写分离:

第一步通过Navicat连接上mycat服务,具体连接信息如下所示:

然后就可以打开mycat,进行数据的添加了。

这里测试结果为:在mycat中添加的数据会自动添加到主数据库中,读取的时候只会读取从数据库。当然这种模式是通过在schema.xml配置得到,具体的配置上面已经介绍过了,这里就不重复说了。可能会有同学要问怎么知道写是写到主数据库中,读是读从数据库呢?我这里的做法是关闭主mysql的服务(直接在服务中关闭即可),然后在mycat中添加数据显示连接mysql失败,读数据是可以的。具体信息如下所示:

其实还有一种配置方法是,刚开始配置的是readHost节点,配置如下:

代码语言:txt
复制
[html] view  
代码语言:txt
复制
代码语言:txt
复制
 
代码语言:txt
复制
  
代码语言:txt
复制
  <!-- can have multi write hosts --> 
代码语言:txt
复制
  
代码语言:txt
复制
  <!-- can have multi read hosts --> 
代码语言:txt
复制
  
代码语言:txt
复制
  
代码语言:txt
复制
 

但这种方式有个问题,即master挂了以后,slave也不能提供服务,而这违反了MySQL主从集群的初衷。

到这里通过mycat实现mysql的读写分离就结束了,具体过程就是上面那步骤,当然还有一些细节没写上去,不过都比较简单相信大家可以解决的。

如果对上面的内容还有什么疑义或者问题都可以加我QQ:208017534咨询。

文献参考地址:http://blog.csdn.net/l1028386804/article/details/55045413

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017年06月27日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档