千家信息网

怎么理解Mycat读写分离

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍"怎么理解Mycat读写分离",在日常操作中,相信很多人在怎么理解Mycat读写分离问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么理解Mycat读写
千家信息网最后更新 2026年11月01日怎么理解Mycat读写分离

这篇文章主要介绍"怎么理解Mycat读写分离",在日常操作中,相信很多人在怎么理解Mycat读写分离问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答"怎么理解Mycat读写分离"的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

1 MySQL读写分离的概述

Mysql作为目前世界上使用最广泛的免费数据库,相信所有从事系统运维的工程师都一定接触过。但在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面。

因此,一般来说都是通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy/Amoeba)来提升数据库的并发负载能力,这样的方案来进行部署与实施的。

1.1 读写分离工作原理:

基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

数据内部交换过程:

1.2 为什么要读写分离:

1)面对越来越大的访问压力,单台的服务器的性能成为瓶颈,需要分担负载;

2)主从只负责各自的写和读,极大程度的缓解X锁和S锁争用;

3)从库可配置myisam引擎,提升查询性能以及节约系统开销;

4)增加冗余,提高可用性。

1.3 实现读写分离的方式:

一般有两种方式实现

1)应用程序层实现,网站的程序实现;

2)应用程序层实现指的是在应用程序内部及连接器中实现读写分离。

优点:

A:应用程序内部实现读写分离,安装既可以使用;

B:减少一定部署难度;

C:访问压力在一定级别以下,性能很好。

缺点:

A:架构一旦调整,代码要跟着变;

B:难以实现高级应用,如自动分库,分表;

C:无法适用大型应用场景。

中间件层实现

中间件层实现是指在外部中间件程序实现读写分离

常见的中间件程序:

Cobar:

阿里巴巴B2B开发的关系型分布式系统,管理将近3000个MySQL实例。在阿里经受住了考验,后面由于作者的走开的原因cobar没有人维护了,阿里也开发了tddl替代cobar。

MyCAT:

社区爱好者在阿里cobar基础上进行二次开发,解决了cobar当时存在的一些问题,并且加入了许多新的功能在其中。目前MyCAT社区活跃度很高,目前已经有一些公司在使用MyCAT。总体来说支持度比较高,也会一直维护下去,

OneProxy:

数据库界大牛,前支付宝数据库团队领导楼总开发,基于mysql官方的proxy思想利用c进行开发的,OneProxy是一款商业收费的中间件,楼总舍去了一些功能点,专注在性能和稳定性上。有朋友测试过说在高并发下很稳定。

Vitess:

这个中间件是Youtube生产在使用的,但是架构很复杂。与以往中间件不同,使用Vitess应用改动比较大要使用他提供语言的API接口,我们可以借鉴他其中的一些设计思想。

Kingshard:

Kingshard是前360Atlas中间件开发团队的陈菲利用业务时间用go语言开发的,目前参与开发的人员有3个左右,目前来看还不是成熟可以使用的产品,需要在不断完善。

Atlas:

360团队基于mysql proxy 把lua用C改写。原有版本是支持分表,目前已经放出了分库分表版本。在网上看到一些朋友经常说在高并发下会经常挂掉,如果大家要使用需要提前做好测试。

MaxScale与MySQL Route:

这两个中间件都算是官方的,MaxScale是mariadb (MySQL原作者维护的一个版本)研发的,目前版本不支持分库分表。MySQL Route是现在MySQL官方Oracle公司发布出来的一个中间件。

优点:

A:架构设计更灵活;

B:可以在程序上实现一些高级控制,如:透明化水平拆分,failover,监控;

C:可以依靠些技术手段提高mysql性能;

D:对业务代码的影响小,同时也安全。

缺点:

需要一定的开发运维团队的支持。

2 什么是MYCAT

一个彻底开源的,面向企业应用开发的大数据库集群;

支持事务、ACID、可以替代MySQL的加强版数据库;

一个可以视为MySQL集群的企业级数据库,用来替代昂贵的Oracle集群;

一个融合内存缓存技术、NoSQL技术、HDFS大数据的新型SQL Server;

结合传统数据库和新型分布式数据仓库的新一代企业级数据库产品;

一个新颖的数据库中间件产品。

3 服务安装与配置

实验架构

服务器

IP

说明

xuegod65

192.168.1.65

mycat服务器,连接数据库时,连接此服务器

xuegod63

192.168.1.63

物理数据库1,master

xuegod64

192.168.1.64

物理数据库2,slave

MyCAT有提供编译好的安装包,支持windows、Linux、Mac、Solaris等系统上安装与运行。官方下载主页http://www.mycat.io。

3.1 文件结构

linux下可以下载Mycat-server-xxxxx.linux.tar.gz 解压在某个目录下,注意目录不能有空格,

在Linux(Unix)下,建议放在/usr/local/Mycat目录下,

目录结构

目录

说明

bin

mycat命令,启动、重启、停止等

catlet

catlet为Mycat的一个扩展功能

conf

Mycat 配置信息,重点关注

lib

Mycat引用的jar包,Mycat是java开发的

logs

日志文件,包括Mycat启动的日志和运行的日志。


配置文件

文件

说明

server.xml

Mycat的配置文件,设置账号、参数等

schema.xml

Mycat对应的物理数据库和数据库表的配置

rule.xml

Mycat分片(分库分表)规则


3.2 mycat安装 (xuegod65)

1.安装JDK 1.7 或者以上版本

第一步:下载jdk-8u131-linux-x64.tar.gz文件 http://haixi.sfkcn.com:8080/201704/tools/jdk-linux-x64.tar.gz


第二步:新建/usr/java文件夹,将jdk-8u131-linux-x64.tar.gz放到该文件夹中,并解压到当前目录下


第三步:配置环境变量 在/etc/profile底部加入如下内容:

JAVA_HOME=/usr/java/jdk1.8.0_131

PATH=$JAVA_HOME/bin:$PATH CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar

export PATH JAVA_HOME CLASSPATH


[root@xuegod65 java]# source /etc/profile #使环境变量生效

查看java -version


2.解压mycat 安装


linux下可以下载Mycat-server-xxxxx.linux.tar.gz 解压到/usr/local/,注意目录不能有空格


  1. 创建mycat用户,并修改密码 useradd mycat


  1. 修改权限 chown - R mycat.mycat /usr/local/mycat


  1. 配置环境变量


1) vi /etc/profile,在系统环境变量文件中增加

MYCAT_HOME=/usr/local/mycat

PATH=$MYCAT_HOME/bin:$PATH


2) 执行 source /etc/profile 命令,使环境变量生效。


  1. 编辑hosts文件

192.168.1.63 xuegod63.cn xuegod63

192.168.1.64 xuegod64.cn xuegod64

192.168.1.65 xuegod65.cn xuegod65


4 服务启动与启动设置

(mycat的用户账号和授权信息是在conf/server.xml文件中配置

[root@xuegod65 ~]#Vim /usr/local/mycat/conf/server.xml

druidparser

123456

ha

user

ha

true

参数说明

user 用户配置节点

--name 登录的用户名,也就是连接Mycat的用户名,这里就是对于外部应用

--password 登录的密码,也就是连接Mycat的密码

--schemas 数据库名,这里会和schema.xml中的配置关联,多个用逗号分开,例如需要这个用户需要管理两个数据库db1,db2,则配置db1,dbs

--privileges 配置用户针对表的增删改查的权限,具体见文档吧


编辑MyCAT的配置文件schema.xml,关于dataHost的配置信息如下:

[root@xuegod65 ~]#vim /usr/local/mycat/conf/schema.xml

select user()

以下是一个模版解释

select user()

balance 属性负载均衡类型,目前的取值有 4 种:

balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的writeHost 上。

balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从模式(M1 ->S1 , M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。

balance="2", 所有读操作都随机的在 writeHost、 readhost 上分发。

balance="3", 所有读请求随机的分发到 wiriterHost 对应的 readhost 执行,writerHost 不负担读压力,注意 balance=3 只在 1.4 及其以后版本有, 1.3 没有。

writeType 属性,负载均衡类型,目前的取值有 3 种:

writeType="0", 所有写操作发送到配置的第一个 writeHost,第一个挂了切到还生存的第二个writeHost,重新启动后已切换后的为准,切换记录在配置文件中:dnindex.properties .

writeType="1",所有写操作都随机的发送到配置的 writeHost。

writeType="2",没实现。

switchType 属性

-1 表示不自动切换

1 默认值,自动切换

2 基于MySQL 主从同步的状态决定是否切换




5 配置Mysql主从

xuegod63上创建数据库和表,用于实现写操作:

[root@xuegod63 ~]# mysql -uroot -p123456

mysql> create database ha;

mysql> use ha;

mysql> create table test(id int,name varchar(20));

mysql> insert into test values(1,'man');

授权给mycat登陆数据库使用的帐号

mysql> grant all privileges on *.* to mycat@'%' identified by '123456';

mysql> grant replication slave on *.* to slave@"192.168.1.%" identified by "123456";

mysql>flush privileges;

mysqldump -uroot -p123456 -B ha>ha.sql #导出给从库

scp ha.sql xuegod64.cn:/root

[root@xuegod64 ~]# vim /etc/my.cnf

log-bin=mysql-bin-master #启用二进制日志

server-id=1 #本机数据库ID 标示

binlog-do-db=HA #可以被从服务器复制的库, 二进制需要同步的数据库名

binlog-ignore-db=mysql #不可以被从服务器复制的库

如需关闭密码强度审计,在my.cnf添加validate-password=off

[root@xuegod64 ~]# systemctl restart mysqld

xuegod64上导入数据库和表,用于实现读操作:

[root@xuegod64 ~]# mysql -uroot -p123456

授权给mycat登陆数据库使用的帐号

mysql> grant all privileges on *.* to mycat@'%' identified by '123456';

mysql>flush privileges;

[root@xuegod64 ~]# vim /etc/my.cnf

server-id=2 #本机数据库ID 标示

[root@xuegod64 ~]# systemctl restart mysqld

mysql>stop slave; #停止slave

mysql> change master to master_host='192.168.1.63',master_user='slave',master_password='123456';

mysql> start slave; #启动slave

mysql> show slave status\G 查看状态,有两个yes主从同步成功!

启动服务mycat服务

[root@xuegod65~]# /usr/local/mycat/bin/mycat start

测试读写分离

6 当我们slave挂掉后咋样呢

模拟故障:从服务器挂掉了

[root@xuegod64 ~]# systemctl stop mysqld

在客户端上测试读写

[root@xuegod66 ~]# mysql -uroot -p123456 -h 192.168.1.65-P8066

mysql> use ha;

mysql> select * from t1;

说明读操作的路由切换到master上了,对外没有任何影响!

7 当我们master挂掉后咋样呢

模拟故障:主服务器挂掉了

[root@xuegod63 ~]# systemctl stop mysqld

在客户端上测试读写

[root@xuegod66 ~]# mysql -uroot -p123456 -h 192.168.1.65 -P8066

mysql> create table t3(id int);

ERROR 1184 (HY000): 拒绝连接 #主数据库停止了,是无法写操作的,但不影响读.

mysql> use ha;

mysql> select * from t1;

到此,关于"怎么理解Mycat读写分离"的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注网站,小编会继续努力为大家带来更多实用的文章!

数据 数据库 配置 文件 服务 中间件 开发 应用 服务器 程序 用户 目录 版本 环境 切换 支持 主从 分表 变量 性能 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 上海挚品互联网科技有限公司 百单网互联网科技有限公司 上海喔噻互联网科技有限公司 北京路客互联网科技有限公司 互联网科技集团 未来的互联网科技 长亮科技 互联网金融 互联网科技大会 互联网科技大会案例 开启互联网科技时代小说 西藏七维空间互联网科技有限公司 互联网科技与管理 互联网和黑科技的看法 互联网科技产业特征 银川新华互联网科技学校联系电话 威龙国际互联网科技公司 深圳无忧互联网科技 杭州披云加互联网科技有限公司 兰石爱特工业互联网科技分公司 现代科技的标志之一的互联网 深圳九邦互联网科技有限公司 A股互联网金融科技公司 致骋互联网科技 互联网科技的英文 极限挑战互联网科技 中国科技互联网公司收入 移动互联网年度科技创新 中国互联网公司排名锤子科技 山东有哪些互联网科技公司 35岁以上互联网科技行业
0