从 01 开始 从 01 开始
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档

晓林

程序猿,自由职业者,博主,英语爱好者,健身达人
首页
  • 📚 计算机基础

    • 计算机简史
    • 数字电路
    • 计算机组成原理
    • 操作系统
    • Linux
    • 计算机网络
    • 数据库
    • 编程工具
    • 装机
  • 🎨 前端

    • Node
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 手机相关技巧
  • 最全面的输入法教程
  • 最全面的浏览器教程
  • Office
  • 图片类工具
  • 效率类工具
  • 最全面的 RSS 教程
  • 码字工具
  • 各大平台
  • 校招
  • 五险一金
  • 职场规划
  • 关于离职
  • 杂谈
  • 自媒体
  • 📖 读书

    • 读书工具
    • 走进科学
  • 🌍 英语

    • 从零开始学英语
    • 英语兔的相关视频
    • Larry 想做技术大佬的相关视频
  • 🏛️ 政治

    • 新闻合订本
    • 反腐
    • GFW
    • 404 内容
    • 审查与自我审查
    • 互联网
    • 战争
    • 读书笔记
  • 💰 经济

    • 关于税
    • 理财
  • 💪 健身

    • 睡眠
    • 皮肤
    • 口腔健康
    • 学会呼吸
    • 健身日志
  • 🏠 其他

    • 驾驶技能
    • 租房与买房
    • 厨艺
  • 电影

    • 电影推荐
  • 电视剧
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • Steam
    • 三国杀
    • 求生之路
  • 小说
  • 关于本站
  • 关于博主
  • 打赏
  • 网站动态
  • 友人帐
  • 从零开始搭建博客
  • 搭建邮件服务器
  • 本站分享
  • 🌈 生活

    • 2022
    • 2023
    • 2024
    • 2025
  • 📇 文章索引

    • 文章分类
    • 文章归档
  • JavaSE

  • JavaSenior

  • JavaEE

  • JavaWeb

  • Spring

  • 主流框架

    • Redis

    • Mybatis

    • Lucene

    • Elasticsearch

    • MQ

    • MyCat

      • MyCat2-尚硅谷
      • MyCat 是什么,为什么要用
      • 搭建环境
      • MyCat 概念
      • MyCat 的配置文件
      • 一主一从复制
      • 一主一从读写分离
        • 创建逻辑库
        • 配置逻辑库
        • 配置数据源
        • 配置集群
        • 重启 MyCat
        • 验证读写分离效果
      • 双主双从复制方案
      • 分库分表
      • MyCat安全设置
      • Mycat2-UI
    • Lombok

  • SpringMVC

  • SpringBoot

  • Java
  • 主流框架
  • MyCat
2023-06-28
目录

一主一从读写分离

# 60.一主一从读写分离

上一篇博客我们搭建了主从复制,下一步我们就使用 MyCat 配置读写分离。 ‍

# 创建逻辑库

登录 MyCat,然后创建数据库:

create database mydb1;
1

逻辑库名字和物理库名字可以不一样,这里为了方便就同名了 ‍

# 配置逻辑库

退出 MyCat,查看配置文件:

ll /usr/local/mycat/conf/schemas/
总用量 12
-rw-r--r--. 1 root root  144 6月  19 22:48 mydb1.schema.json
-rw-r--r--. 1 root root 5299 6月  14 20:55 mysql.schema.json
1
2
3
4

‍ 可以看到多了一个 mydb1.schema.json 文件,内容如下:

{
	"customTables":{},
	"globalTables":{},
	"normalProcedures":{},
	"normalTables":{},
	"schemaName":"mydb1",
	"shardingTables":{},
	"views":{}
}
1
2
3
4
5
6
7
8
9

‍ 我们指定一个数据源(增加第 7 行):

{
	"customTables":{},
	"globalTables":{},
	"normalProcedures":{},
	"normalTables":{},
	"schemaName":"mydb1",
        "targetName": "prototype",
	"shardingTables":{},
	"views":{}
}
1
2
3
4
5
6
7
8
9
10

# 配置数据源

我们可以自己写配置文件,也可以通过命令的方式来创建配置文件。

我们可以登录 MyCat,然后运行如下语句(也可以使用 Navicat 连接 MyCat):

/*+ mycat: createDataSource{ "name": "rwSepw", "url": "jdbc: mysql://192.168.56.101:3306/mydb1?useSSL = false&characterEncoding = UTF-8&useJDBCCompliantTimezoneShift = true", "user": "root", "password": "Mycat0520@" } */;

/*+ mycat: createDataSource{ "name": "rwSepr", "url": "jdbc: mysql://192.168.56.103:3306/mydb1?useSSL = false&characterEncoding = UTF-8&useJDBCCompliantTimezoneShift = true", "user": "root", "password": "Mycat0520@" } */;
1
2
3

以上两条语句创建了两个数据源,我们取名为 rwSepw(最后一个字母 w 指 write),rwSepr(最后一个字母 r 指 read),然后指定数据源信息

如果添加错了数据源,怎么修改?也是通过命令:

/*+ mycat: setSequence{"name": "rwSepw", "user": "root123"} */;
1

‍ 也可以删除后再新增:

/*+ mycat: dropDataSource{"name": "rwSepw" }*/;
1

查看数据源配置结果:

/*+ mycat: showDataSources{} */;
1

‍ 部分显示内容如下,可以看到确实新增了 2 个数据源:

NAME USERNAME PASSWORD MAX_CON MIN_CON
rwSepr root Mycat0520@ 1000 1
rwSepw root Mycat0520@ 1000 1
prototypeDs learnMycatUser Mycat0520@ 1000 1

相应的配置文件也有生成:

ll /usr/local/mycat/conf/datasources
总用量 12
-rw-r--r--. 1 root root 436 6 月  19 21:17 prototypeDs.datasource.json
-rw-r--r--. 1 root root 575 6 月  20 07:32 rwSepr.datasource.json
-rw-r--r--. 1 root root 575 6 月  20 07:24 rwSepw.datasource.json
1
2
3
4
5

‍

# 配置集群

刚刚我们配置逻辑库的时候,指定的数据源名称是 prototype,这可以是某一个数据源的名称,也可以是一个集群的名称。

接下来,我们就创建一个集群,并将刚刚新建的两个数据源添加到集群中,然后做好读写分离的配置:

/*! mycat: createCluster{"name": "prototype", "masters": ["rwSepw"], "replicas": ["rwSepr"]} */;
1

‍ 查看集群信息:

/*+ mycat: showClusters{} */;
1

‍ 部分查询结果:

NAME SWITCH_TYPE MAX_REQUEST_COUNT TYPE WRITE_DS READ_DS
prototype SWITCH 2000 BALANCE_ALL rwSepw rwSepw, rwSepr

可以看到写的数据源(WRITE_DS)是 rwSepw,读的数据源(READ_DS)则有 2 个 rwSepw, rwSepr,这是因为 master 也可以用来读。 ‍ 相应的配置文件也有生成:

ll /usr/local/mycat/conf/clusters
总用量 4
-rw-r--r--. 1 root root 325 6 月  20 07:32 prototype.cluster.json
1
2
3

‍ 文件内容如下:

{
	"clusterType":"MASTER_SLAVE",
	"heartbeat":{
		"heartbeatTimeout":1000,
		"maxRetryCount":3,
		"minSwitchTimeInterval":300,
		"showLog":false,
		"slaveThreshold":0.0
	},
	"masters":[
		"rwSepw"
	],
	"maxCon":2000,
	"name":"prototype",
	"readBalanceType":"BALANCE_ALL",
	"replicas":[
		"rwSepr"
	],
	"switchType":"SWITCH"
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

字段说明:

  • readBalanceType,查询负载均衡策略,可选值:

    • BALANCE_ALL(默认值):获取集群中所有数据源,也就是所有数据源都负责读请求
    • BALANCE_ALL_READ:获取集群中允许读的数据源
    • BALANCE_READ_WRITE:获取集群中允许读写的数据源,但允许读的数据源优先
    • BALANCE_NONE:获取集群中允许写的数据源,即主节点中选择一个
  • switchType:SWITCH 进行主从切换,NOT_SWITCH 不进行主从切换

# 重启 MyCat

cd /usr/local/mycat/bin
./mycat restart
1
2

# 验证读写分离效果

我们可以通过查询日志,判断数据到底是从哪个数据库中查询出来的;

但有个更简单的方法,在 master 数据库表 mytbl 中插入带系统变量数据,造成主从数据不一致:

INSERT INTO mytbl VALUES(2, @@hostname);
1

‍

hostname 是 Linux 主机的名字,读者可以通过在 Linux 中输入 hostname 来查看主机名称,也可通过 hostname newName 来临时修改主机名字。 ‍ 在 master 192.168.56.101 中,hostname 是 node1:

SELECT * from mytbl
1

查询结果:

id NAME
1 zhang3
2 node1

‍ 在从机 192.168.56.103 中,hostname 是 node2,查询结果:

id NAME
1 zhang3
2 node2

‍ 然后我们去 MyCat 中查询:

SELECT * from mytbl
1

查询多几次,可以看到显示的结果有 node1,也有 node2,随机显示。

上次更新: 2025/5/5 17:15:09
一主一从复制
双主双从复制方案

← 一主一从复制 双主双从复制方案→

最近更新
01
新闻合订本 2025-10
10-31
02
2025 年 10 月记
10-30
03
用 AI 批量优化思源笔记排版
10-15
更多文章>
Theme by Vdoing | Copyright © 2022-2025 | 粤 ICP 备 2022067627 号 -1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式