news 2026/2/7 23:46:32

Mycat 2 实现 MySQL 读写分离,并且实现 主从同步

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Mycat 2 实现 MySQL 读写分离,并且实现 主从同步

一、环境准备

1. MySQL 主从复制配置

主库配置 (master.cnf):

[mysqld] server-id = 1 log-bin = mysql-bin binlog-format = ROW binlog-do-db = your_database expire_logs_days = 7 max_binlog_size = 100M

从库配置 (slave.cnf):

[mysqld] server-id = 2 relay-log = mysql-relay-bin read-only = 1 replicate-do-db = your_database

2. 建立主从复制

在主库执行:

-- 创建复制用户 CREATE USER 'repl'@'%' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%'; -- 查看主库状态 SHOW MASTER STATUS; -- 记录 File 和 Position

在从库执行:

-- 配置主从复制 CHANGE MASTER TO MASTER_HOST='master_ip', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107; -- 启动复制 START SLAVE; -- 查看复制状态 SHOW SLAVE STATUS\G;

二、Mycat 2 配置

1. 安装 Mycat 2

# 下载 Mycat 2 wget https://github.com/MyCATApache/Mycat2/releases/download/{version}/mycat2-{version}.tar.gz # 解压 tar -zxvf mycat2-{version}.tar.gz -C /usr/local/ cd /usr/local/mycat2

2. 配置数据源 (datasource.json)

{ "dbType": "mysql", "idleTimeout": 60000, "initSqls": [], "initSqlsGetConnection": true, "instanceType": "READ_WRITE", "maxCon": 1000, "maxConnectTimeout": 3000, "maxRetryCount": 5, "minCon": 1, "name": "masterDataSource", "password": "password", "type": "JDBC", "url": "jdbc:mysql://master_ip:3306/your_database?useUnicode=true&characterEncoding=UTF-8", "user": "root", "weight": 0 }, { "dbType": "mysql", "idleTimeout": 60000, "initSqls": [], "initSqlsGetConnection": true, "instanceType": "READ", "maxCon": 1000, "maxConnectTimeout": 3000, "maxRetryCount": 5, "minCon": 1, "name": "slaveDataSource", "password": "password", "type": "JDBC", "url": "jdbc:mysql://slave_ip:3306/your_database?useUnicode=true&characterEncoding=UTF-8", "user": "root", "weight": 0 }

3. 配置集群 (cluster.json)

{ "clusterType": "MASTER_SLAVE", "heartbeat": { "heartbeatTimeout": 10000, "maxRetryCount": 3, "minSwitchTimeInterval": 60000, "slaveThreshold": 0 }, "masters": [ "masterDataSource" ], "maxCon": 200, "name": "mysqlCluster", "readBalanceType": "BALANCE_ALL", "readBalanceType": "BALANCE_ALL_READ", "slaves": [ "slaveDataSource" ], "switchType": "SWITCH" }

4. 配置逻辑库和表 (schema.json)

{ "customTables": {}, "globalTables": {}, "normalProcedures": {}, "normalTables": { "user": { "createTableSQL": "CREATE TABLE `user` (id INT PRIMARY KEY, name VARCHAR(50))", "locality": { "schemaName": "your_database", "tableName": "user", "tableUnit": "mysqlCluster" } } }, "schemaName": "mycat_db", "shardingTables": {}, "views": {} }

5. 配置读写分离策略

mycat.yml中配置:

interceptors: - className: io.mycat.plug.loadBalance.LoadBalanceStrategy name: loadBalance enabled: true properties: defaultLoadBalance: balanceAllRead writeCloudBalance: masterOnly readCloudBalance: slaveFirst - className: io.mycat.plug.sequence.SequenceHandler name: sequenceHandler enabled: true properties: sequenceHandlerType: distributed - className: io.mycat.plug.router.Router name: router enabled: true properties: routerStrategy: read_write_split

6. 配置分片规则(可选)

如果需要分片,配置rule.json

{ "function": { "partitionByLong": { "clazz": "io.mycat.router.function.PartitionByLong", "partitionCount": "2", "partitionLength": "256" } }, "tableRules": { "user": { "ruleName": "user", "rules": [ { "columns": [ "id" ], "algorithm": "partitionByLong" } ] } } }

三、读写分离策略详解

1. 负载均衡策略

mycat.yml中配置:

loadBalance: defaultLoadBalance: balanceAll writeCloudBalance: masterOnly readCloudBalance: slaveFirst

可用策略:

  • balanceAll:所有读请求随机分配到所有从节点

  • balanceAllRead:所有读请求随机分配到所有读节点

  • balanceMasterSlave:优先主节点,主节点不可用才用从节点

  • balanceSlaveFirst:优先从节点,从节点不可用才用主节点

  • masterOnly:只使用主节点

2. SQL 路由规则

Mycat 2 默认的读写分离规则:

  • 写操作:INSERT、UPDATE、DELETE、CREATE、ALTER、DROP 等路由到主库

  • 读操作:SELECT 路由到从库

  • 事务中的读:自动路由到主库保证一致性

  • 强制读主/*+ mycat:db_type=master */ SELECT ...


四、启动和测试

1. 启动 Mycat 2

# 启动 ./bin/mycat start # 查看状态 ./bin/mycat status # 查看日志 tail -f logs/wrapper.log

2. 连接测试

# 连接 Mycat mysql -umycat -p123456 -P8066 -h127.0.0.1 # 创建测试表 CREATE TABLE test ( id INT PRIMARY KEY, name VARCHAR(50) ); # 插入数据(会路由到主库) INSERT INTO test VALUES (1, 'test'); # 查询数据(会路由到从库) SELECT * FROM test;

3. 监控读写分离状态

在 Mycat 管理端查看:

-- 查看数据源状态 SHOW DATASOURCES; -- 查看集群状态 SHOW CLUSTERS; -- 查看连接信息 SHOW CONNECTIONS; -- 查看SQL统计 SHOW SQL_STAT;

五、高级配置

1. 主从延迟处理

# 在 mycat.yml 中配置 heartbeat: slaveThreshold: 60 # 从库延迟超过60秒则跳过 checkSlaveLag: true lagCheckInterval: 5000

2. 事务一致性保证

// 对于需要强一致性的读操作,使用Hint强制走主库 /*+ mycat:db_type=master */ SELECT * FROM account WHERE id = 1 FOR UPDATE;

3. 多从库负载均衡

{ "clusterType": "MASTER_SLAVE", "masters": ["master1"], "slaves": ["slave1", "slave2", "slave3"], "readBalanceType": "WEIGHT_RANDOM", "weights": { "slave1": 1, "slave2": 2, "slave3": 1 } }

4. 故障转移配置

{ "heartbeat": { "heartbeatTimeout": 5000, "maxRetryCount": 3, "slaveThreshold": 0, "switchType": "SWITCH" }, "switch": { "errorRetryTimeout": 300000, "enableMasterSlaveSwitch": true, "slaveFailoverRetryDelay": 10000 } }

六、监控和维护

1. 监控脚本示例

#!/bin/bash # 监控主从同步状态 mysql -h slave_ip -uroot -ppassword -e "SHOW SLAVE STATUS\G" | grep -E "Slave_IO_Running|Slave_SQL_Running|Seconds_Behind_Master" # 监控Mycat连接数 mysql -umycat -p123456 -P8066 -h127.0.0.1 -e "SHOW @@CONNECTION"

2. 常见问题解决

  1. 主从延迟问题

    • 增加从库配置

    • 使用半同步复制

    • 业务端读主库

  2. 连接池问题

    { "maxCon": 100, "minCon": 10, "maxConnectTimeout": 3000, "idleTimeout": 60000 }
  3. 内存优化

    server: bufferPool: pageSize: 8192 chunks: 2048

七、完整部署架构

应用程序 ↓ Mycat 2 (负载均衡+SQL路由) ↓ MySQL 主库 (写) ←→ 主从复制 ↓ MySQL 从库 (读) MySQL 从库 (读)

这种架构提供了:

  1. 自动的读写分离

  2. 透明的故障转移

  3. 灵活的负载均衡策略

  4. 完善的监控机制

  5. 易于扩展的架构

建议在生产环境部署前,充分测试各种场景,确保数据一致性和系统稳定性。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/6 3:34:50

AI智能体工单处理实战:云端GPU 1小时部署,成本透明

AI智能体工单处理实战:云端GPU 1小时部署,成本透明 引言:当客服主管遇到AI智能体 作为客服主管,你是否经常面临这样的困境:每天数百个工单需要处理,团队人力有限,高峰期响应延迟,客…

作者头像 李华
网站建设 2026/2/7 22:02:12

AI威胁情报生产线:从采集到分析,云端自动化流水线

AI威胁情报生产线:从采集到分析,云端自动化流水线 引言:当安全团队遇上AI流水线 想象一下,你是一名网络安全分析师,每天要处理成千上万的威胁日志——就像在暴雨中试图用咖啡滤纸接住每一滴雨水。传统的手工处理方式…

作者头像 李华
网站建设 2026/2/5 18:09:08

5个热门AI智能体对比:云端GPU3小时完成选型测试

5个热门AI智能体对比:云端GPU3小时完成选型测试 1. 为什么需要AI智能体选型? 作为技术负责人,当我们需要为项目选择AI智能体框架时,常常面临几个现实问题: 本地开发机性能不足,跑不动大模型购买测试服务…

作者头像 李华
网站建设 2026/2/7 19:33:44

开题报告 “一次过” 秘籍!虎贲等考 AI:30 分钟搞定专业框架,答辩不慌

毕业论文的 “第一关” 从来不是正文写作,而是开题报告。选题被导师否定、研究意义表述模糊、技术路线逻辑混乱、文献综述缺乏深度…… 这些开题路上的 “绊脚石”,让无数学生反复修改却迟迟无法通过,甚至耽误后续论文创作进度。 而虎贲等考…

作者头像 李华
网站建设 2026/2/3 12:19:24

宏智树AI:重塑学术写作新范式,开启智能科研新纪元——让论文写作从“复杂工程”变为“高效创作”

在学术研究的道路上,论文写作是每位学者必经的“最后一公里”。然而,从选题开题到数据整理,从文献综述到查重降重,每一步都充满挑战:灵感枯竭、逻辑混乱、数据处理低效、查重率居高不下……这些问题不仅消耗大量时间&a…

作者头像 李华
网站建设 2026/2/3 20:20:26

GTE中文语义相似度计算一文详解:高维向量转换技术

GTE中文语义相似度计算一文详解:高维向量转换技术 1. 引言:GTE 中文语义相似度服务 在自然语言处理(NLP)领域,语义相似度计算是理解文本间深层关系的核心任务之一。传统基于关键词匹配或编辑距离的方法难以捕捉句子间…

作者头像 李华