使用MyCat中间件实现主从复制&读写分离

本文介绍了如何使用Mycat中间件实现MySQL的主从复制和读写分离。首先,文章阐述了前提条件,即已建立一主一从的MySQL环境。接着详细步骤包括准备Mycat、修改配置文件如server.xml、schema.xml和rule.xml,启动Mycat,并通过连接MyCat进行测试验证。最后,文章回顾了自定义和基于中间件的读写分离策略。

目录

前提

准备Mycat

修改mycat配置文件

启动mycat

连接MyCat

测试基于Mycat中间件的主从操作

回顾自定义读写分离策略

回顾基于中间件的读写分离策略 


 

前提

 

我们已经对mysql实现了基本的读写分离,一主一从。

https://blog.youkuaiyun.com/Delicious_Life/article/details/106154307 

 

 

准备Mycat

 

我们把下载好的Mycat包拖到/haoke/mycat目录下,这里使用的mycat版本是1.6.6.1

cd到压缩包所在目录,执行解压 

tar -xvf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz 

解压成功后删除解压包

rm -rf Mycat-server-1.6.6.1-release-20181031195535-linux.tar.gz 

重命名

mv mycat mycat01

 

 

修改mycat配置文件

 

cd mycat01/conf

 

先修改server.xml,这个文件进行mycat系统配置,和用户设置。 

vim server.xml

我们先删除里面所有内容 

编辑系统配置和用户配置,用户名itcast,密码itcast123,用户所使用的逻辑库叫做itcast

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
		<system>
			<property name="nonePasswordLogin">0</property>
			<property name="useHandshakeV10">1</property>
			<property name="useSqlStat">0</property>
			<property name="useGlobleTableCheck">0</property>
			<property name="sequnceHandlerType">2</property>
			<property name="subqueryRelationshipCheck">false</property>
			<property name="processorBufferPoolType">0</property>
			<property name="handleDistributedTransactions">0</property>
			<property name="useOffHeapForMerge">1</property>
			<property name="memoryPageSize">64k</property>
			<property name="spillsFileBufferSize">1k</property>
			<property name="useStreamOutput">0</property>
			<property name="systemReserveMemorySize">384m</property>
			<property name="useZKSwitch">false</property>
		</system>
	<!--这里是设置的itcast用户和虚拟逻辑库-->
		<user name="itcast" defaultAccount="true">
			<property name="password">itcast123</property>
			<property name="schemas">itcast</property>
		</user>
</mycat:server>

再修改schema.xml,这个文件用来配置主从关系

vim schema.xml

同样是先删除再新增,根据实际情况修改,注意schema的name是你在server.xml中配置的用户名

table的name是mycat中间件管理的具有同步功能的表名,dataNode中的database是分片数据库的名称。

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
        <!--配置数据表-->
        <schema name="itcast" checkSQLschema="false" sqlMaxLimit="100">
                <table name="tb_ad" dataNode="dn1" rule="mod-long" />
        </schema>
        <!--配置分片关系-->
        <dataNode name="dn1" dataHost="cluster1" database="itcast" />
        <!--配置连接信息-->
        <dataHost name="cluster1" maxCon="1000" minCon="10" balance="3"
                writeType="1" dbType="mysql" dbDriver="native" switchType="1" 
                slaveThreshold="100">
                <heartbeat>select user()</heartbeat>
                <writeHost host="W1" url="192.168.62.132:3306" user="root"
                     password="root">
                        <readHost host="W1R1" url="192.168.62.132:3307" user="root"
                        password="root" />
                </writeHost>
        </dataHost>
</mycat:schema>

mycat负载均衡的规则

上面的配置我们设置负载均衡的规则为3 

接下来我们修改rule.xml文件,设置分片规则,也就是取模分片的规则

vim rule.xml

在这个位置,把值改为1

 

 

启动mycat

 

进入bin目录 

/haoke/mycat/mycat01/bin

测试mycat是否配置成功

./mycat console

下图代表mycat配置成功

启动mycat,还是在bin目录下

./startup_nowrap.sh

下图代表启动成功

------------------------------------------------ 

扩展下如何停止mycat,输入命令查看mycat启动端口

通过kill进程号杀死即可~ 

kill 进程号

------------------------------------------------ 

 

 

连接MyCat

 

mycat的默认端口号是8066,用户名和密码是刚才咱们在配置文件中配置的itcast和itcast123 。

个人尝试,只有在mycat使用此命令启动时“./mycat console”,navicat才能连接成功,如果navicat连接成功后操作mycat报错,可以尝试重新启动mycat解决问题

连接成功后长这个德行,注意itcast库和tb_ad表是根据你的xml文件中配置规则自动生成的,但是此时tb_ad是个逻辑空表,暂时不能用,如果你没有生成itcast数据库,可以在3360master01中新建一个itcast数据库,重启mycat进行测试

 

 

测试基于Mycat中间件的主从复制

 

在mycat的数据库中进行如下操作

创建表

CREATE TABLE `tb_ad` (
	`id` bigint(20) NOT NULL AUTO_INCREMENT,
	`type` int(10) DEFAULT NULL COMMENT '广告类型',
	`title` varchar(100) DEFAULT NULL COMMENT '描述',
	`url` varchar(200) DEFAULT NULL COMMENT '图片URL地址',
	`created` datetime DEFAULT NULL,
	`updated` datetime DEFAULT NULL,
	PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COMMENT='广告表';

新增数据

INSERT INTO `tb_ad` (`id`, `type`, `title`, `url`, `created`, `updated`) VALUES ('1','1', 'UniCity万科天空之城', 'http://itcast-haoke.oss-cn-qingdao.aliyuncs.com/images/2018/11/26/15432029097062227.jpg','2018-11-26 11:28:49','2018-11-26 11:28:51');

这回再连接你的master01和slave01,都同时多出来了一个itcast数据库,一张和mycat中tb_ad内容一致的表

 

 

回顾自定义读写分离策略

 

我们的读写分离基于主从复制,主负责写,从负责读

我们之前在schema.xml中配置的,所有读请求都走3307,所有写请求走3306

 

 

回顾基于中间件的读写分离策略 

 

现在我们成功做到了通过操纵MyCat操作数据库集群!

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值