MySQL配置读写分离

前置环境


事先准备3台虚拟机,其配置如下

  • 主数据库(master)ip:192.168.126.151,装有percona5.6.51
  • 从数据库(slave)ip:192.168.126.152,装有percona5.6.51
  • mycat服务(mycat)ip:192.168.126.153,装有mycat

另外,以上3台服务器均需配置jdk(1.8)

 

配置主从


master

master服务器上,使用vim /etc/my.cnf打开mysql配置文件,加入

server-id=1
log-bin=mysql-bin # binlog

重启mysql

service mysql restart

进入mysql通过show master status可以看到,其中File字段即为binlog文件名字
在这里插入图片描述

slave

与master一样,使用vim /etc/my.cnf并添加

server-id=2
log-bin=mysql-bin # binlog

然后在mysql中执行如下语句

CHANGE MASTER TO MASTER_HOST="192.168.126.151", 
MASTER_PORT=3306,
MASTER_USER="root",
MASTER_PASSWORD="root",
MASTER_LOG_FILE="mysql-bin.000002",
MASTER_LOG_POS=120

以上均要与master中的值一样。

执行start slave开启服务,并使用show slave status查看,如出现下图,则成功完成主从配置
在这里插入图片描述
这时我们修改master,则slave也会出现相应更改。

注意: 如果主从是由同一台虚拟机克隆而来的话,server-uuid会一样,这时需要删除其中一台虚拟器的/var/lib/mysql/auto.cnf 文件,并进行重启,这样mysql会重新生成server_uuid

 

取消主从

在salve上,进入MySQL执行stop slave停止服务,然后通过执行reset slave all清空先前的配置信息,最后运行show slave status发现所有字段均为空了。

在master上,执行reset master

对于my.cnf配置文件,可不做修改
 

读写分离


读写分离即读和写操作在不同数据库上完成。通过将read和write分开,可以有效减低获取锁冲突的几率。

但是Dao层不会关心数据库操作具体会由哪个库执行,此外,如上面配置的主数据库发生故障时,也需要我们手动切换到从数据库,因此,我们需要一个中间层(MySQL Proxy)来完成具体数据库的分派和自动切换。

而mycat就是这个MySQL Proxy。

在这里插入图片描述
 

配置mycat

进入mycat安装目录./mycat/conf,会有schema.xml和server.xml。

在server.xml 加入

	<!--对业务端暴露的逻辑数据库,实际并不存在,在schema.xml中配置-->
	<user name="root">
		<property name="password"></property>
		<!--数据库名-->
		<property name="schemas">mycat</property> 
	</user>

修改schema.xml

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


	<!--配置逻辑数据库-->
	<schema name="mycat" checkSQLschema="false" sqlMaxLimit="100">
		<!--此处name为实际要对应的表名, 并配置上数据源-->
		<table name="test1" dataNode="dn1" />
	</schema>

	<!--可以理解为数据源-->
	<!--此处database实际数据库名-->
	<dataNode name="dn1" dataHost="master" database="test" />
	
	<!--每个dataHost可以看做一套主从架构,在外看来只是数据源-->
	<dataHost name="master" maxCon="1000" minCon="10" balance="0"
			  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.126.151:3306" user="root" password="dj123456">	
			<readHost host="hostM2" url="192.168.126.152:3306" user="root" password="dj123456"/>
		</writeHost>
		
		<!-- <writeHost host="hostM2" url="localhost:3316" user="root" password="123456"/> -->
	</dataHost>
</mycat:schema>

其中shema配置文件有些概念需要理清,可参考下图
在这里插入图片描述

测试


启动mycat服务

mycat start
mycat status

如果启动不成功,可以在./mycat/logs/wrapper.log中查看启动日志

连接上接mycat插入数据

在这里插入图片描述
主库已出现数据
在这里插入图片描述
而从库配置为readhost,不会出现数据
在这里插入图片描述

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值