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 希望大家生活是幸福的 知道自己为了什么努力 下期再见!!!

相关推荐
python_chai7 小时前
从数据汇总到高级分析,SQL 查询进阶实战(下篇)—— 分组、子查询与窗口函数全攻略
数据库·sql·mysql
冒泡的肥皂11 小时前
MVCC初学demo(一
数据库·后端·mysql
Bruce_Liuxiaowei14 小时前
MySQL完整重置密码流程(针对 macOS)
mysql
麦麦大数据14 小时前
F003疫情传染病数据可视化vue+flask+mysql
mysql·flask·vue·大屏·传染病
星空下的曙光15 小时前
mysql 命令语法操作篇 数据库约束有哪些 怎么使用
数据库·mysql
小楓120115 小时前
MySQL數據庫開發教學(一) 基本架構
数据库·后端·mysql
之诺15 小时前
MySQL通信过程字符集转换
后端·mysql
沙振宇16 小时前
【数据库】通过‌phpMyAdmin‌管理Mysql数据
数据库·mysql
JSON_L17 小时前
MySQL 加锁与解锁函数
数据库·mysql