MyCAT完整实验报告

MyCAT完整实验报告

前言

刚刚看了一下前面的那篇MyCAT的文章 感觉有一些问题 所以拿出一篇文章再说一下 单独构建了完整的实验环境 这样会全面一点

安装MyCAT

bash 复制代码
#跳过

主从配置

bash 复制代码
#不多追溯 因为我们选择的主从 也可以做双主机 但我们后边再说

环境搭建

一、环境规划

服务器角色 IP 地址 部署服务 说明
server_1 192.168.3.168 MySQL + MyCAT MyCAT 中间件节点
server_2(主库) 192.168.3.135 MySQL 主库(MASTER)
server_3(从库) 192.168.3.159 MySQL 从库(SLAVE)
(用于下一个实验 目前无需在意) 备用主库 192.168.3.160 MySQL 双主架构备用主库

修改配置文件

bash 复制代码
vim m1.datasource.json #PS:文件名是 *****.datasource.json
{
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        "instanceType":"READ_WRITE",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        "name":"m1",
        "password":"123",
        "queryTimeout":0,
        "type":"JDBC",
        "url":"jdbc:mysql://192.168.3.135:3306?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true",
        "user":"aa",
        "weight":0
}
----------------------------------------------------
vim m2.datasource.json
{
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        "instanceType":"READ_WRITE",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        "name":"m2",
        "password":"123",
        "queryTimeout":0,
        "type":"JDBC",
        "url":"jdbc:mysql://192.168.3.160:3306?serverTimezone=UTC&useUnicode=true&characterEncoding=UTF-8&autoReconnect=true",
        "user":"bb",
        "weight":0
}

#PS:
#1> MyCat 2 要求每个数据源必须单独放在一个 JSON 文件中,一个 JSON 文件只能定义一个数据源,不能在一个文件中同时定义多个数据源(如 m1 和 m2)。
#2> MyCat 2 加载数据源时,会扫描 conf/datasources 目录下的所有 JSON 文件,每个文件被视为一个独立的数据源配置。
#3> 如果在一个文件中定义多个数据源(即使格式正确),MyCat 会解析失败,导致启动报错。

#PS:以下为命令配置

/*+ mycat:createDataSource
{
    "dbType": "mysql",
    "idleTimeout": 60000,
    "initSqls": [],
    "initSqlsGetConnection": true,
    "instanceType": "READ_WRITE",
    "maxCon": 1000,
    "maxConnectTimeout": 3000,
    "maxRetryCount": 5,
    "minCon": 1,
    "name": "m1",
    "password": "123",
    "type": "JDBC",
    "url": "jdbc:mysql://192.168.3.135:3306?useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8",
    "user": "root",
    "weight": 0
}
*/

-- 更多操作添加读的数据源

/*+ mycat:createDataSource
{
    "dbType": "mysql",
    "idleTimeout": 60000,
    "initSqls": [],
    "initSqlsGetConnection": true,
    "instanceType": "READ",
    "maxCon": 1000,
    "maxConnectTimeout": 3000,
    "maxRetryCount": 5,
    "minCon": 1,
    "name": "m2",
    "password": "123",
    "type": "JDBC",
    "url": "jdbc:mysql://192.168.3.159:3306?useUnicode=true&serverTimezone=UTC&characterEncoding=UTF-8",
    "user": "root",
    "weight": 0
}
*/

集群配置(conf/clusters/prototype.cluster.json)

bash 复制代码
vim ../clusters/prototype.cluster.json
{
        "clusterType":"MASTER_SLAVE",
        "heartbeat":{
                "heartbeatTimeout":1000,
                "maxRetryCount":0,
                "minSwitchTimeInterval":300,
                "showLog":true,
                "slaveThreshold":0.0
        },
        "masters":[
                "m1"
        ],
        "maxCon":2000,
        "name":"prototype",
        "readBalanceType":"BALANCE_ALL",
        "replicas":[
                "m1"
        ],
        "switchType":"SWITCH"
}

#PS:双主机
{
 "clusterType":"MASTER_MASTER",  // 双主架构,部分版本也支持用 MASTER_SLAVE(但需将双主都放 masters)
  "heartbeat":{
    "heartbeatTimeout":1000,
    "maxRetry":3,
    "minSwitchTimeInterval":300,
    "slaveThreshold":0
  },
  "masters":[
    "m1",   // 主库1(读写)
    "m1s1"  // 主库2(读写,原从库升级为双主)
  ],
  "maxCon":2000,
  "name":"prototype",
  "readBalanceType":"BALANCE_ALL",  // 读请求在两个主库间均衡分配
  "switchType":"SWITCH",  // 支持故障切换
  "weight":{  // 可选:给两个主库配置权重,控制请求分配比例
    "m1":1,
    "m1s1":1
  }
}

1. 主从集群构建与高可用基础

  • 定义主从角色 :明确集 群中 m1主库(Master)m2从库(Replica/Slave) ,MyCat 会基于此角色维护主从关系。
  • 主从心跳检测 :通过配置的 heartbeat 机制(超时 1000ms、重试 3 次、最小切换间隔 300ms),实时检测主库 m1 和从库 m2 的存活状态,为后续故障切换打基础。

2. 读写分离(核心功能)

  • 读请求负载均衡readBalanceType: "BALANCE_ALL" 表示 所有从库(此处为 m1s1)都会参与读请求分发,MyCat 会将查询(SELECT)等读操作自动路由到从库,避免主库读压力过大;若从库故障,读请求会自动调整(如 fallback 到主库,具体依赖额外配置)。
  • 写请求路由到主库 :所有写操作(INSERT/UPDATE/DELETE)会被 MyCat 强制路由到主库 m1,确保主库数据是最新的,再通过 MySQL 自身的主从同步(如 binlog 复制)将数据同步到从库 m2,保证主从数据一致性。

测试

重启MyCAT

复制代码
cd /usr/local/mycat/bin
./mycat restart
netstat -anput | grep 8066
tcp6       0      0 :::8066                 :::*                    LISTEN      8834/java
mysql -u root -p123456 -h 127.0.0.1 -P 8066 

创建测试库和表

sql 复制代码
create database CATTEST; --创CATTEST库
mysql> 
mysql> use CATTEST;
Database changed
mysql> create table test(id int);
Query OK, 0 rows affected (0.38 sec)

mysql> insert into test valuse(1);
ERROR 1064 (HY000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'valuse (valuse)' at line 1
mysql> insert into test values(1);
Query OK, 1 row affected (0.01 sec)

mysql> 
sql 复制代码
 mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| CATTEST            |
| information_schema |
| mycat              |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

总结

弥补了上一期的MyCAT的不完整 所以 这次 做了了一个相对来说完整的 包括怎么配置等等 其实还想写分库分表的 但理了一下思路 好像在这篇文章去说的话 就会很多了 所以 下篇文章去完整去说

好了 更新的评论越来越慢 但也没办法 博主尽量像写的详细易懂一点 OK 希望大家生活是幸福的 知道自己为了什么努力 下期再见!!!

相关推荐
a_blue_ice4 小时前
JAVA 面试 MySQL
java·mysql·面试
Java水解7 小时前
【MySQL】数据库基础
后端·mysql
沃夫上校7 小时前
MySQL 中文拼音排序问题
java·mysql
要一起看日出7 小时前
MVCC-多版本并发控制
数据库·mysql·mvcc
Hx__7 小时前
MySQL InnoDB 的 MVCC 机制
数据库·mysql
chat2tomorrow8 小时前
数据采集平台的起源与演进:从ETL到数据复制
大数据·数据库·数据仓库·mysql·低代码·postgresql·etl
依稀i1239 小时前
Spring Boot + MySQL 创建超级管理员
spring boot·mysql
驾驭人生9 小时前
Asp .Net Core 系列:Asp .Net Core 集成 Hangfire+MySQL
数据库·mysql·.netcore
xhbh6669 小时前
不止是DELETE:MySQL多表关联删除的JOIN语法实战详解
数据库·mysql·程序员·mysql删除语句
知其然亦知其所以然10 小时前
面试官微笑发问:第100万页怎么查?我差点当场沉默…
后端·mysql·面试