mycat实现mysql主从复制读写分离

mycat实现mysql读写分离

一、 一主一从

1.配置mysql主从复制,参考https://blog.youkuaiyun.com/weixin_44032502/article/details/112527931
2.修改用户信息,与MySQL区分

<user name="mycat">
	<property name="password">mycat</property>
	<property name="schemas">TESTDB</property>
</user>

3.修改配置文件 schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">

	<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
	</schema>

	<dataNode name="dn1" dataHost="host1" database="testdb" />
	<dataHost name="host1" maxCon="1000" minCon="10" balance="2"
			  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
		<heartbeat>select user()</heartbeat>
		<!-- can have multi write hosts -->
		<writeHost host="hostM1" url="192.168.1.178:3306" user="root"
				   password="root">
			<!-- can have multi read hosts -->
			<readHost host="hostS2" url="192.168.1.178:3307" user="root" password="root" />
		</writeHost>
	</dataHost>
</mycat:schema>

负载均衡类型,目前的取值有4 种:
(1) balance=“0”, 不开启读写分离机制, 所有读操作都发送到当前可用的 writeHost 上。
(2) balance=“1”,全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从
模式(M1->S1, M2->S2,并且 M1 与 M2 互为主备),正常情况下, M2,S1,S2 都参与 select 语句的负载均衡。
(3) balance=“2”,所有读操作都随机的在 writeHost、 readhost 上分发。
(4) balance=“3”,所有读请求随机的分发到 readhost 执行, writerHost 不负担读压力

<dataHost name="host1" maxCon="1000" minCon="10" balance="2"
	writeType="0" dbType="mysql" dbDriver="native" switchType="1"
	slaveThreshold="100">

4.重启mycat bin目录下执行

./mycat console

5.验证读写分离

二、 双主双从

在这里插入图片描述
准备四台服务器 ,这里我是在docker启动了四个容器。

1、 搭建 MySQL 数据库主从复制(双主双从)
① 双主机配置
Master1配置,修改配置文件: vim /etc/my.cnf

#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=STATEMENT
# 在作为从数据库的时候, 有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1, 取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=1

Master2配置,修改配置文件: vim /etc/my.cnf

#主服务器唯一ID
server-id=3
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=STATEMENT
# 在作为从数据库的时候,有写入操作也要更新二进制日志文件
log-slave-updates
#表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1 .. 65535
auto-increment-increment=2
# 表示自增长字段从哪个数开始,指字段一次递增多少,他的取值范围是1 .. 65535
auto-increment-offset=2

② 双从机配置
Slave1配置 ,vim /etc/my.cnf

#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay

Slave2配置,vim /etc/my.cnf

#从服务器唯一ID
server-id=4
#启用中继日志
relay-log=mysql-relay

③ 双主机、 双从机重启 mysql 服务

④ 主机从机都关闭防火墙

⑤ 在两台主机上建立帐户并授权 slave

#在主机MySQL里执行授权命令
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
#查询Master1的状态
show master status;

⑥ 在从机上配置需要复制的主机
Slava1 复制 Master1, Slava2 复制 Master2

#复制主机的命令
CHANGE MASTER TO MASTER_HOST='主机的IP地址',MASTER_USER='slave',MASTER_PASSWORD='123123',MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;
#启动两台从服务器复制功能
start slave;
#查看从服务器状态
show slave status\G

⑦ 两个主机互相复制
Master2 复制 Master1, Master1 复制 Master2

-- master1复制命令
CHANGE MASTER TO MASTER_HOST='master2 ip',MASTER_USER='save',MASTER_PASSWORD='123456',MASTER_LOG_FILE='',MASTER_LOG_POS=123;
--master2 复制命令
CHANGE MASTER TO MASTER_HOST='master1 ip',MASTER_USER='save',MASTER_PASSWORD='123456',MASTER_LOG_FILE='',MASTER_LOG_POS=123;

-- 分别启动两台主机复制功能
start slave;
show slave status\G

2、 修改 Mycat 的配置文件 schema.xml

<dataNode name="dn1" dataHost="host1" database="testdb" />
<dataHost name="host1" maxCon="1000" minCon="10" balance="1"
	writeType="0" dbType="mysql" dbDriver="native" switchType="1"
	slaveThreshold="100" >
	<heartbeat>select user()</heartbeat>
	<!-- can have multi write hosts -->
	<writeHost host="hostM1" url="192.168.1.178:3306" user="root"
		password="root">
		<!-- can have multi read hosts -->
		<readHost host="hostS1" url="192.168.1.178:3307" user="root"
		password="root" />
	</writeHost>
	<writeHost host="hostM2" url="192.168.1.178:3308" user="root"
		password="root">
		<!-- can have multi read hosts -->
		<readHost host="hostS2" url="192.168.1.178:3309" user="root"
		password="root" />
	</writeHost>
</dataHost>

balance=“1”: 全部的readHost与stand by writeHost参与select语句的负载均衡。
writeType=“0”: 所有写操作发送到配置的第一个writeHost,第一个挂了切到还生存的第二个
writeType=“1”,所有写操作都随机的发送到配置的 writeHost, 1.5 以后废弃不推荐
writeHost,重新启动后以切换后的为准,切换记录在配置文件中:dnindex.properties 。
switchType=“1”: 1 默认值,自动切换。
-1 表示不自动切换
2 基于 MySQL 主从同步的状态决定是否切换。

3、 启动 Mycat bin目录下执行

./mycat console
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值