当前位置: 首页 > news >正文

MyCat实现mysql读写分离

一、环境准备

1.1 确认当前环境

角色IP用途
Master192.168.10.110
Slave1192.168.10.111
Slave2192.168.10.112
MyCat192.168.10.113中间件

1.2 确保主从复制已配置好

在 Master 上创建测试库和表:

CREATE DATABASE ha; USE ha; CREATE TABLE test ( id INT, name VARCHAR(20), address VARCHAR(50) ); INSERT INTO test VALUES(1, 'master', 'from_master');

在 Slave1/Slave2 上确认数据已同步:

USE ha; SELECT * FROM test;

1.3 授权 MyCat 访问后端 MySQL

在所有 MySQL 服务器(Master、Slave1、Slave2)上执行:

GRANT ALL PRIVILEGES ON *.* TO 'mycat'@'%' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;

二、安装 JDK(MyCat 依赖)

在 MyCat 服务器192.168.10.113上操作:

# 下载 JDK(如果已有 JDK 可跳过) cd /opt wget https://mirrors.aliyun.com/centos/7/os/x86_64/Packages/java-1.8.0-openjdk-headless-1.8.0.262.b10-1.el7.x86_64.rpm rpm -ivh java-1.8.0-openjdk-headless-1.8.0.262.b10-1.el7.x86_64.rpm java -version

配置环境变量:

vim /etc/profile.d/java.sh

添加:

export JAVA_HOME=/usr/local/jdk1.8.0 export PATH=$JAVA_HOME/bin:$PATH export CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

生效:

source /etc/profile.d/java.sh java -version # 确认显示 1.8.x

三、下载安装 MyCat

cd /opt tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/ cd /usr/local

创建 MyCat 用户:

useradd mycat chown -R mycat:mycat /usr/local/mycat

配置 MyCat 环境变量:

vim /etc/profile.d/mycat.sh

添加:

export MYCAT_HOME=/usr/local/mycat export PATH=$MYCAT_HOME/bin:$PATH

生效:

source /etc/profile.d/mycat.sh

四、配置 MyCat

4.1 配置server.xml(用户认证)

vim /usr/local/mycat/conf/server.xml

找到<user name="root">部分,替换或修改为:

<user name="mycat"> <property name="password">123456</property> <property name="schemas">ha</property> </user> <user name="user"> <property name="password">user</property> <property name="schemas">ha</property> <property name="readonly">true</property> </user>

4.2 配置schema.xml(读写分离核心)

先备份原文件:

mv /usr/local/mycat/conf/schema.xml /usr/local/mycat/conf/schema.xml.bak

创建新配置:

vim /usr/local/mycat/conf/schema.xml

写入以下内容:

<?xml version="1.0"?> <!DOCTYPE mycat:schema SYSTEM "schema.dtd"> <mycat:schema xmlns:mycat="http://io.mycat/"> <!-- 逻辑库 ha --> <schema name="ha" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1"> </schema> <!-- 数据节点 --> <dataNode name="dn1" dataHost="dthost" database="ha" /> <!-- 数据主机 --> <dataHost name="dthost" maxCon="500" minCon="10" balance="1" writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100"> <heartbeat>select user()</heartbeat> <!-- 主库(写) --> <writeHost host="master" url="192.168.10.110:3306" user="mycat" password="123456"> <!-- 从库1(读) --> <readHost host="slave1" url="192.168.10.111:3306" user="mycat" password="123456" /> <!-- 从库2(读) --> <readHost host="slave2" url="192.168.10.112:3306" user="mycat" password="123456" /> </writeHost> </dataHost> </mycat:schema>

五、启动 MyCat

# 切换到 mycat 用户启动 su - mycat /usr/local/mycat/bin/mycat start exit

查看启动日志:

cat /usr/local/mycat/logs/wrapper.log

查看端口(MyCat 默认端口 8066):

netstat -antulp | grep 8066

六、验证读写分离

6.1 连接 MyCat

mysql -u mycat -p123456 -h 192.168.10.113 -P 8066

6.2 查看逻辑库和表

SHOW DATABASES; USE ha; SHOW TABLES; SELECT * FROM test;

应该能看到id=1, name=master, address=from_master

6.3 验证读写分离

步骤1:停止从库复制,制造主从不一致

Slave1Slave2上分别执行:

STOP SLAVE;

步骤2:在从库插入标记数据

Slave1

USE ha; INSERT INTO test VALUES(10, 'slave1', 'from_slave1');

Slave2

USE ha; INSERT INTO test VALUES(20, 'slave2', 'from_slave2');

步骤3:通过 MyCat 多次查询

USE ha; SELECT * FROM test;

执行 3-5 次,观察结果:

  • 第1次可能看到id=10, 1

  • 第2次可能看到id=20, 1

  • 第3次可能看到id=10, 1(轮询)

如果两次结果不同,说明读写分离配置成功

步骤4:验证写走主库

通过 MyCat 插入:

INSERT INTO test VALUES(88, 'write_test', 'from_mycat');

然后:

  • 直接连Master查询 → 能看到id=88

  • 直接连Slave1/Slave2查询(STOP SLAVE未恢复)→ 看不到id=88

步骤5:恢复主从同步

在 Slave1 和 Slave2 上:

START SLAVE;

七、配置参数说明

参数含义
balance1读请求在 readHost 间轮询,writeHost 不负担读
writeType0只写第一个 writeHost(master)
switchType-1不自动切换主库
sqlMaxLimit100查询默认返回最大行数
http://www.jsqmd.com/news/1325609/

相关文章:

  • 2026年智慧会议平板怎么选?行业推荐榜单与选购指南 - 优质品牌商家
  • 广东生产工具房框架成型设备厂家供应厂家推荐|精诚机械地址电话核对清单|2026年8月4日资料更新 - mobible
  • HDFS架构深度解析:从核心原理到高可用与性能调优实战
  • ASCII码表全解析:从二进制到字符转换的底层逻辑与应用
  • 2026年心理咨询师报考条件最新规定:学历、专业、工作年限要求明细 - 中科资质认证报考中心
  • C语言实现async/await异步编程:从状态机到协程模拟
  • 二叉搜索树(BST)原理与C++高效实现指南
  • 杭州古法金/3D硬金回收亏多少?附2026下半年实时行情,三步教你算出真实到手价 - 奢侈品回收机构参考
  • 广东哈尔斯保温杯定制 企业logo 定制 源头授权厂家 - GrowUME
  • C++线程安全单例模式:从双检锁到Meyers‘ Singleton的演进与实现
  • 2026沈阳生产车用清净增效剂厂家哪家好?实用选购指南:5个维度帮你避开采购坑 - mobible
  • RAG项目全链路实践指南:从部署到问题排查
  • Blender套卡插件:一键自动化重复操作,提升3D创作效率
  • 布林带策略量化实战:用Python构建波动率通道交易系统
  • 口碑好的上海日式搬场公司 宝妈避坑实用技巧分享 - 资讯综合
  • 西门子PLC电梯控制系统开发实战指南
  • HTTP协议之缓存
  • 基于Docker容器化部署OpenClaw与本地大模型的AI智能体实践指南
  • 廉江眼镜店哪家好?本地配镜行业盘点+青少年配镜避坑全攻略 - 国麟测评
  • 广东定制工具房横梁成型机厂家推荐|大精诚机械地址、电话与到店核对信息|2026年8月4日资料更新 - mobible
  • 去除AI味儿的终极技巧!利用AI来反AI,只需三步教你高效降低AI率(附反向提示词)
  • TCP三次握手与四次挥手:面试必考与实战优化
  • SpringBoot+Vue学生学业质量分析系统实战
  • 若依框架深度解析:从权限设计到二次开发的企业级实践
  • 2026宁波美妆行业GEO优化服务商全面盘点:正规合规实力机构甄选及签约避坑指南 - U渠道
  • 苏州吴中区汽修门店大盘点,结合车主痛点教你选靠谱汽修 - 国麟测评
  • 重庆江津区江南职教中心----国家级重点公办职高 - 学习招生
  • 内网不出网且边界主机为Linux的情况让内网windows主机通过MSF上线CS
  • 筹码分布数据分析实战:用Python构建主力建仓成本分析系统
  • 华尔街正在重新审视AI的价值——从四大云厂财报看AI的“变现分水岭”