MySQL读写分离之一主一从

原理

MySQL 的主从复制,是基于二进制日志( binlog )实现的。
MySQL读写分离之一主一从_第1张图片

准备

主机
角色
用户名
密码
192.168.2.3
master
root
newPwd520@
192.168.2.4
slave
root
newPwd520@
主从复制的搭建,可以参考 MYSQL的主从复制-CSDN博客

一主一从读写分离

MyCat 控制后台数据库的读写分离和负载均衡由 schema.xml 文件 datahost 标签的 balance 属性控
制。

schema.xml配置



	
	
	
		select user()
		
			
		
	
writeHost 代表的是写操作对应的数据库, readHost 代表的是读操作对应的数据库。 所以我们要想
实现读写分离,就得配置 writeHost 关联的是主库, readHost 关联的是从库。
而仅仅配置好了 writeHost 以及 readHost 还不能完成读写分离,还需要配置一个非常重要的负责均衡的参数 balance ,取值有 4 种,具体含义如下:
参数
含义
0
不开启读写分离机制 , 所有读操作都发送到当前可用的 writeHost
1
全部的 readHost 与 备用的 writeHost 都参与 select 语句的负载均衡(主要针对 于双主双从模式)
2
所有的读写操作都随机在 writeHost , readHost 上分发
3
所有的读请求随机分发到 writeHost 对应的 readHost 上执行 , writeHost 不负担读压力
所以,在一主一从模式的读写分离中, balance 配置 1 3 都是可以完成读写分离的。

server.xml配置

配置 root 用户可以访问 SHOPPING TEST 以及 TEST_RW 逻辑库。

	
		123456
		TEST_RW
		
		
		
		
		
	

测试

配置完毕 MyCat 后,重新启动 MyCat
bin/mycat stop
bin/mycat start
然后观察,在执行增删改操作时,对应的主库及从库的数据变化。 在执行查询操作时,检查主库及从库对应的数据变化。
在master上执行
create database test;

use test;

create table tb_user(
	id int(11) not null,
	name varchar(50) not null,
	sex varchar(1),
	primary key (id)
)engine=innodb default charset=utf8;

insert into tb_user(id,name,sex) values(1,'Tom','1');
insert into tb_user(id,name,sex) values(2,'Trigger','0');
insert into tb_user(id,name,sex) values(3,'Dawn','1');

slave同样生成test数据库和数据

MySQL读写分离之一主一从_第2张图片
我们在mycat下插入数据
MySQL读写分离之一主一从_第3张图片
在主从数据库都有数据增加
MySQL读写分离之一主一从_第4张图片
当我们停掉master的数据库
systemctl stop mysqld

我们在mycat下查询数据可以获得数据,但是插入数据却失败

MySQL读写分离之一主一从_第5张图片

在测试中,我们可以发现当主节点Master 宕机之后,业务系统就只能够读,而不能写入数据了。 
那如何解决这个问题呢?这个时候我们就得通过另外一种主从复制结构来解决了。

你可能感兴趣的:(运维,mysql,数据库)