首页 > 数据库 >Mycat2+Mysql一主一从实现读写分离配置

Mycat2+Mysql一主一从实现读写分离配置

时间:2024-12-04 15:45:54浏览次数:4  
标签:log 数据源 Mycat2 mysql 一主一 mycat json Mysql

Mycat2+Mysql一主一从实现读写分离配置

前置配置

环境信息

ip地址 软件 角色 版本
192.168.1.19 Mysql 8.0.40-0ubuntu0.20.04.1
192.168.1.19 Mycat2 —— 1.21-release-3-14
192.168.1.20 Mysql 8.0.40-0ubuntu0.20.04.1

image-20241203184927825

操作步骤

1. 修改并增加数据源

  • 新增配置文件${mycat安装目录}/conf/datasources/ds0.datasource.json,该文件在环境搭建时应该已修改好
{
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        "instanceType":"READ_WRITE",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        "name":"ds0",
        "password":"123456",
        "type":"JDBC",
        "url":"jdbc:mysql://localhost:3306/test?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false",
        "user":"mycat",
        "weight":0
}
  • 增加配置文件${mycat安装目录}/conf/datasources/ds1.datasource.json,ds1为随意取的名字,与文件中name的值保持一致即可
{
        "dbType":"mysql",
        "idleTimeout":60000,
        "initSqls":[],
        "initSqlsGetConnection":true,
        "instanceType":"READ",
        "maxCon":1000,
        "maxConnectTimeout":3000,
        "maxRetryCount":5,
        "minCon":1,
        "name":"ds1",
        "password":"123456",
        "type":"JDBC",
        "url":"jdbc:mysql://192.168.1.20:3306/test?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=UTF-8&useSSL=false",
        "user":"mycat",
        "weight":0
}
  • instanceType:instanceType配置实例只读还是读写,读节点可以设置为READ

image-20241203185033513

2. 修改集群配置

  • 复制prototype.cluster.json文件为master-slave.cluster.json
cp prototype.cluster.json master-slave.cluster.json
  • 修改配置文件${mycat安装目录}/conf/cluster/master-slave.cluster.json
{
        "clusterType":"MASTER_SLAVE",
        "heartbeat":{
                "heartbeatTimeout":1000,
                "maxRetry":3,
                "minSwitchTimeInterval":300,
                "slaveThreshold":0
        },
        "masters":[
                "ds0"
        ],
        "replicas":[
                "ds1"
        ],
        "maxCon":200,
        "name":"master-slave",
        "readBalanceType":"BALANCE_ALL_READ",
        "switchType":"NOT_SWITCH"
}
  • 解释:

    • replicas: 配置datasource目录下Mysql从机数据源名称

    • name:后面schema配置会用到

    • readBalanceType: 查询负载均衡策略

      • BALANCE_ALL(默认值):获取集群中所有数据源
      • BALANCE_ALL_READ:获取集群中允许读的数据源
      • BALANCE_READ_WRITE:获取集群中允许读写的数据源,但允许读的数据源优先
      • BALANCE_NONE:获取集群中允许写数据源,即主节点中选择
    • switchType:切换模式

      • NOT_SWITCH:不进行主从切换
      • SWITCH:进行主从切换

3. 配置物理库 schemas和mycat数据源/集群的关联关系

  • 新增配置文件${mycat安装目录}/conf/schemas/test.schema.json,命名为${数据库}.schema.json
{
    "schemaName": "test",
    "targetName": "master-slave",
    "normalTables": {}
}
  • 解释
    • schemaName:指向物理库
    • targetName:指向集群或者数据源, 这里配置与前面集群配置的name一致

测试

测试前准备

  • 开启Mysql主从的日志
#日志输出到表中 对应的表是mysql.general_log 
SET GLOBAL log_output = 'TABLE'; 

#打开general_log,重启后失效
SET GLOBAL general_log = 'ON';

# 测试完成后将日志重写入文件
SET GLOBAL log_output = 'FILE';
SET GLOBAL general_log = 'OFF'; #关闭
  • 通过如下语句查看最近执行的语句
SELECT event_time,
       user_host,
       thread_id,
       server_id,
       command_type,
       CAST(argument AS CHAR(500) CHARACTER SET utf8mb4) argument
FROM mysql.general_log
ORDER BY event_time DESC;
  • 为避免干扰,可在Mysql主机使用truncate mysql.general_log命令先清空表中日志再查询

连接Mycat

image-20241203185954578

测试写入

  • 在mycat的test数据库中写入插入命令

Mysql主机结果

image-20241203105929629

Mysql从机查询结果

image-20241203110259741

  • 同步方式为ROW,可以看出从机并没有执行insert语句,但是数据已增加。尝试多次,结果一致,符合预期

测试查询

先清空mysql.general_log,并在Mycat中查询表user_info的最后三个结果

select * from `user_info` order by id desc limit 3;

两个数据库均有查询语句,符合预期

  • Mysql主库

image-20241203190843036

  • Mysql从库

image-20241203190931986

参考

标签:log,数据源,Mycat2,mysql,一主一,mycat,json,Mysql
From: https://www.cnblogs.com/litayun/p/18586450

相关文章

  • JAVA开源毕业设计 房屋租赁系统 Vue.JS+SpringBoot+MySQL
    本文项目编号T020,文末自助获取源码\color{red}{T020,文末自助获取源码}......
  • JAVA开源毕业设计 大学生租房平台 Vue.JS+SpringBoot+MySQL
    本文项目编号T019,文末自助获取源码\color{red}{T019,文末自助获取源码}......
  • JAVA开源毕业设计 网上订餐系统 Vue.JS+SpringBoot+MySQL
    本文项目编号T018,文末自助获取源码\color{red}{T018,文末自助获取源码}......
  • elastic8.4.0搜索+logstash<=>mysql实时同步+kibana可视化操作+netcore代码笔记
    做全文搜索,es比较好用,安装可能有点费时费力。mysql安装就不说了。主要是elastic8.4.0+kibana8.4.0+logstash-8.16.1,可视化操作及少了netcore查询代码。安装elastic8.4.0+kibana8.4.0使用docker-desktop,logstash-8.16.1是线程解压执行文件。1. docker-compose.yml如下:首先使......
  • Mysql高频面试题汇总
    Mysql高频面试题一.sql如何定位查询慢定义sql查询慢可以哈斯用相关的运维工具或者mysql自身提供的慢日志查询功能来实现,在我的项目当中也是采用了Skywalking链路追踪的中间件用来监控接口执行情况,在Skywalking中可以我们可以针对运行速度慢的接口进行查询,在其提......
  • MySQL语句学习第二篇_数据库
    专栏记录MySQL的学习,感谢大家观看。本章的专栏......
  • MYSQL数据库配置登录超时退出功能
    my.ini配置文件添加如下配置:[mysqld]plugin_load_add=connection_control.dllconnection_control=FORCE_PLUS_PERMANENTconnection_control_failed_login_attempts=FORCE_PLUS_PERMANENTconnection_control_failed_connections_threshold=3connection_control_max_connec......
  • MySQL: 划分具有连续相同值的区间
    需求有一组数据,第一列是类型A/B,第二列是操作时间,怎么取出不同类型不同时间段的最大、最小操作时间?输入:输出:建表语句:createtabletest2( `type`varchar(5), `time`timestamp)engine=innodb;insertintotest2values('A','2021-08-0910:00:00'),('A','2021-08......
  • 【MySQL】表的增删改查
    表的增删改查一、向表添加数据1.1单行数据,全列插入1.2多行数据,指定列插入1.3插入或则更新1.4替换二、Retrieve(查询)2.1select2.2where条件2.3对查询到的结果排序2.4筛选分页结果三、update(更新)四、delete(删除数据)五、聚合函数六、groupby的使用一、向表添加......
  • 通过flinkSql将kafka和mysql连接
    kafkaToKafka{"user_id":"1","page_id":"1","status":"success"}{"user_id":"1","page_id":"1","status":"success"}{"user_id&q......