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

相关推荐
wuqingshun3141592 小时前
MYSQL默认的事务隔离级别是什么?为什么选择这个级别?
数据库·mysql
这个DBA有点耶5 小时前
导个数据中文全变问号?字符集这事儿真没那么简单
数据库·mysql·代码规范
wuqingshun3141595 小时前
MYSQL中如果发生死锁应该如何解决?
数据库·mysql
是上好佳佳佳呀7 小时前
MySQL 基础:从数据库概念到表结构管理DDL
数据库·mysql
DB哥讲数据库9 小时前
【最新】MySQL9.7安装教程:图文详解(附MySQL安装包)
android·mysql·adb
DB哥讲数据库10 小时前
MySQL 8.4 安装教程:超详细图文讲解(附mysql安装包)
linux·数据库·mysql·centos
wefg111 小时前
【MySQL】MySQL C API 访问 MySQL
数据库·mysql
L16247612 小时前
Zabbix 7.0 LTS 完整部署与运维手册(AlmaLinux 9 + MySQL 8.0 + Nginx)
运维·mysql·zabbix
玖玥拾1 天前
C# 语言进阶(十五)C# 游戏服务端 MySQL 数据库
服务器·开发语言·网络·数据库·mysql·c#