MyCat - 高级 - 读写分离 - MyCat 实现 MySQL 双主双从读写分离 | 学习笔记

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 快速学习 MyCat - 高级 - 读写分离 - MyCat 实现 MySQL 双主双从读写分离

开发者学堂课程【全面讲解开源数据库中间件MyCat使用及原理(二):MyCat - 高级 - 读写分离 - MyCat 实现 MySQL 双主双从读写分离】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/756/detail/13283


MyCat - 高级 - 读写分离 - MyCat 实现 MySQL 双主双从读写分离

内容介绍:

一、配置

二、读写分离验证

 

一、配置

<?xm1 version="1.0"7>

<100CTYPE mycat:schema SYSTEM"schema. dtd">

<mycat:schema xmlns:mycat="http://io.mycat/">

<schema name="ITCAST"checks QLschema

="true"sqIMaxLimit="100">

<table name="user"data Rode="dn1"primaryKey="id"/>

</schema>

<dataNode name="dn1"dataHost=

"localhostl"database="db03"/>

<dataHost name="localhost 1"maxCon="1000"minCon

="10"ba1ance="1"writeType="0 dbType="mysql"

dbDriver="native"switchType="1" slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<writeHost host='hostM1"url="192,168,192,147:3306

"user="root"password="itcast'>

<readHost host="hostS1"ur1="192.168.192.149:3306

"user="root"password="itcast"/>

</writethost>

</dataHost>

</mycat:schema>

接下来通过 MyCat 完成 MySQL 双主双从的读写分离。对于这一块的配置,我们主要还是操作核心配置文件 scheme.xml,通过 schema.xml 当中的 balance 属性来控制读写分离的类型。首先需要到 157 服务器克隆一个窗口,在这个窗口当中,需要切换到 mycat 的目录下,在 mycat 目录当中有一个 conf 目录,这里面有一个 schema.xml。先把 steamer.xml 进行备份,把它改一个名字改为scheme_ms.xml。

image.png

修改完成之后,还需要复制一份配置文件,因为需要一份新的配置文件,叫 scheme_ms.xml 修改为 schema.xml。做这个操作就是将原有的配置文件进行一个备份,然后生成一个新的配置文件,在新的配置文件上进行改造,就可以了。

接下来通过 NotePad++ 里面的插件进行修改。选择 MyCat1,找到 usr 目录,以及 usr 下面的 local,下面的 mycat 当中的 conf,找到刚才的 schema.xml。我们要修改 schema.xml,把里面的配置全部删掉。在这里面需要把上面的配置复制过来。

第一个逻辑库是 ITCAST,第二个逻辑表 user,刚才创建的表就是 user 表,他的数据节点 dn1,这个 dn1 指向的是 localhost1。数据库是 db03,他指的是 local host1 这个 dataHost 里面的 db03,而下面那个dataHost  里面的配置,最大连接,最小连接以及 balance 是负载均衡的策略机制。balance 为 1,还有 writeHost 为 0,数据库的类型 mysql,数据库的驱动采用的是百内驱动,切换类型 switchType 选择的是 1。下面是心跳,还有就是 writeHost,需要配置两个 writeHost,因为现在是双主双从。两个 writeHost 需要对应两台主机,一个是157,一个是 159。157 这台主机对应的从是 158,所以需要把 149 改为 158,151 改为 160。用户名 root,密码 ITCAST。就相当于第一个主 hostM1 对应第一个从 hostS1,第二个主 hostM2 对应第二个从 hosts2,这一块的配置就配置完了。

<schema name="ITCAST"checks QLschema

="true"sqIMaxLimit="100">

<table name="user"data Rode="dn1"primaryKey="id"/>

</schema>

<dataNode name="dn1"dataHost=

"localhostl"database="db03"/>

<dataHost name="localhost 1"maxCon="1000"minCon

="10"ba1ance="1"writeType="0 dbType="mysql"

dbDriver="native"switchType="1" slaveThreshold="100">

<heartbeat>select user()</heartbeat>

<writeHost host='hostM1"url="192,168,192,157:3306

"user="root"password="itcast'>

<readHost host="hostS1"ur1="192.168.192.158:3306

"user="root"password="itcast"/>

</writethost>

<writeHost host='hostM1"url="192,168,192,159:3306

"user="root"password="itcast'>

<readHost host="hostS1"ur1="192.168.192.160:3306

"user="root"password="itcast"/>

</writethost>

</dataHost>

</mycat:schema>

配置完成之后,需要检查 server.xml,里面的执行权限信息逻辑库 itcast 不用改动。

 

二、读写分离验证

1、接下来需要重启 my cat 进行测试。到 157 执行 bin/mycat restart,重启完成之后需要连接 mycat。连接 mycat 需要执行 mysql  -h 192.168.192.157 -p 8066 -u root -p,这样就连接上了 mycat。执行 show databases,可以看到逻辑库 ITCAST 已经有了,执行 use ITCAST、show tables 在查看里面的逻辑表 user 也已经有了。接下来执行 select * from user,会发现数据可以查询出来,关键点就是所查询出来的 user 表当中的数据,是从四个节点中哪个节点中查询出来的呢?

2、这个时候需要再打开一个窗口,去看 mycat 的日志,切换到 local 下面的 mycat,在 logs 目录下,在 logs 目录下有一个 mycat.log 查看一下。找到 select * from user,

image.png

可以看到是从 160 这个节点查的。在 157 上再查一次,可以看到是从 158 节点查的。接下来再查询一次,还是 160。再查一次,是 158。一会儿 158,一会儿160,再来查询一次,现在是 159,再查询一次,是 160。也就是说 158、159、160 都查询过,但是 157 没有执行过查询,因为他是查询操作。为什么没有让 157来执行呢?原因就在于我们刚才配置的一个属性 balance,balance属性我们配置的是 1,balance 为 1 代表的是所有的 readHost,代表的是从节点,以及 stand by writeHost 代表的是备用的写节点,备用的写节点实际上就是第二个写节点,这三个节点会参与 select 语句的负载均衡。也就是说,当我们发送一条 select 语句的时候,如果 balance 为 1,备用的主节点以及两个从节点都会参与负载均衡。所以 158、159、160 都可能会执行这条语句,但是 157 不会。

3、还需要做一个测试,当执行的不是 select 语句,而是一条 insert 语句,要来看它插入到哪了。一定要在 mycat 当中来执行,去找一个 insert 语句,在 157 上执行。当再插入一次,insert 语句在 157 插入。实际上不管执行多少次 insert,写入的操作永远操作的是 157。当我们执行的是查询的操作,那么她所操作的这个节点可能是备用的主节点以及两个从节点,这是由 balance 为 1 来决定的。这里主要是验证一下 balance 为 1 的情况。

4、接下来还要进行一个操作,还需要挂掉一个节点。要让主节点挂掉,因为现在写入的操作都是经过 157 来执行的,都是转发到 157 这台节点上,当 157 节点挂掉之后,又是怎样的现象呢?我们可以试一下。现在执行插入操作都是没有问题的,还是在 157 上进行。接下来将 157 挂掉,执行 service mysql stop,现在 157这个节点正在进行关闭,正在进行停止,已经停止完毕了。停止完毕之后,MyCat 的心跳检测在连接 157 的时候没有连接上,连接被拒绝了。

image.png

接下来,在往 mycat 当中来执行写入操作。大家会发现,他尝试了一次写入,但是这次写入被拒绝了,当我们再次执行的时候,发现成功了。这次执行 insert 语句走的是 159 节点。再插入一个数据,插入数据的时候走的是 159 节点,而 159 是157 的备用节点,这就验证了双主双从从的情况下,如果主节点挂掉,那么备用节点会启动。这是我们验证 mycat 双主双从读写分离的一个配置。

5、这里面还有两个配置,一个就是 writeType,write Type 取决于两个,一个是0,一个是 1,0 代表的是写操作都转发到第一台 writeHost,writeHost 挂了,会切换到 writeHost2 上;1 代表的是写操作都随机的发送到配置的 writeHost 上。如果为 0,写操作只会转发到第一个 writeHost,如果为 1,写操作会随机的在两个 writeHost 转发,会转发到两个 writeHost 上。还有一个属性是 switchType,switch 是切换,Type 是类型,SwitchType 指的是主从切换的类型,如果为负一代表的是不自动切换,如果是一代表的是自动切换。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
18天前
|
存储 SQL 关系型数据库
Mysql学习笔记(二):数据库命令行代码总结
这篇文章是关于MySQL数据库命令行操作的总结,包括登录、退出、查看时间与版本、数据库和数据表的基本操作(如创建、删除、查看)、数据的增删改查等。它还涉及了如何通过SQL语句进行条件查询、模糊查询、范围查询和限制查询,以及如何进行表结构的修改。这些内容对于初学者来说非常实用,是学习MySQL数据库管理的基础。
78 6
|
27天前
|
负载均衡 监控 关系型数据库
MySQL 官宣:支持读写分离了!!
【10月更文挑战第8天】MySQL的读写分离功能显著提升了数据库性能、可用性和可靠性。通过将读写操作分配至不同服务器,有效减轻单个服务器负载,提高响应速度与吞吐量,并增强系统稳定性。此外,它还支持便捷的扩展方式,可通过增加只读服务器提升读操作性能。实现读写分离的方法包括软件层面(如使用数据库中间件)和硬件层面(使用独立服务器)。使用时需注意数据一致性、负载均衡及监控管理等问题。
|
18天前
|
SQL 关系型数据库 MySQL
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
MySQL中用于数据检索的`fetchone()`, `fetchmany()`, `fetchall()`函数的功能、SQL语句示例和应用场景。
37 3
Mysql学习笔记(三):fetchone(), fetchmany(), fetchall()详细总结
|
18天前
|
SQL Ubuntu 关系型数据库
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
本文为MySQL学习笔记,介绍了数据库的基本概念,包括行、列、主键等,并解释了C/S和B/S架构以及SQL语言的分类。接着,指导如何在Windows和Ubuntu系统上安装MySQL,并提供了启动、停止和重启服务的命令。文章还涵盖了Navicat的使用,包括安装、登录和新建表格等步骤。最后,介绍了MySQL中的数据类型和字段约束,如主键、外键、非空和唯一等。
57 3
Mysql学习笔记(一):数据库详细介绍以及Navicat简单使用
|
18天前
|
关系型数据库 MySQL 数据库
Mysql学习笔记(四):Python与Mysql交互--实现增删改查
如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
47 1
|
2月前
|
关系型数据库 MySQL Java
MySQL主从复制实现读写分离
MySQL主从复制(二进制日志)、 Sharding-JDBC实现读写分离
MySQL主从复制实现读写分离
|
3月前
|
SQL 关系型数据库 MySQL
MySQL学习笔记
这篇文章是一份关于MySQL数据库操作的学习笔记,涵盖了数据库的终端操作、数据类型、建表约束、事务处理以及SQL的连接查询等基础知识点。
|
3月前
|
SQL 关系型数据库 MySQL
mysql读写分离,主从同步
本文介绍了如何在Laravel项目中配置数据库读写分离,并实现MySQL主从同步。主要步骤包括:在`config/database.php`中设置读写分离配置;为主机授予从机访问权限;配置各MySQL服务器的`/etc/my.cnf`文件以确保唯一的`server-id`;以及通过SQL命令设置主从关系并启动从服务。文章还针对一些常见错误提供了排查方法。最后通过验证确认主从同步是否成功。[原文链接](https://juejin.cn/post/6901581801458958344)。版权所有者为作者佤邦帮主,转载请遵循相关规定。
|
3月前
|
cobar 关系型数据库 MySQL
使用MyCat实现MySQL主从读写分离(一)概述
【8月更文挑战第11天】MySQL读写分离通过主从复制分散负载,主库负责写操作,从库承担读查询,以复制技术确保数据一致性。此策略有效缓解锁竞争,提升查询效能并增强系统可用性。实现方式包括应用层处理,简便快捷但灵活性受限;或采用中间件如MyCAT、Vitess等,支持复杂场景但需专业团队维护。
87 0
|
16天前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
50 3
Mysql(4)—数据库索引