MySQL读写分离

读写分离,简单地说是把对数据库的读和写操作分开,以对应不同的数据库服务器。主数据库提供写操作,从数据库提供读操作,这样能有效地减轻单台数据库的压力。

一、一主一从读写分离

1、一主一从原理:

MySQL的主从复制,是基于二进制日志(binlog)实现的。

10.1.1.10 :master

10.1.1.20 :slave

检查主从同步是否生效:

2、一主一从读写分离

(1) 介绍:

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

负载均衡策略 balance 配置:

(2) 配置:

① 修改 schema.xml:

② 修改 server.xml:

③ 启动mycat:

balance 值设置为3,所有的读操作均由从库承担,从库的数据变更不会同步到从库。如果从库与主库上的数据不一致,mycat查询数据得到的结果是从库中的数据。

加入主库宕机,查询操作不受影响,但插入、更新等操作则无法实现。

二、双主双从读写分离

1、双主双从搭建:

(1) 介绍:

一个主机 Master1 用于处理所有写请求,它的从机 Slave1 和另一台主机 Master2 还有它的从机 Slave2 负责所有读请求。当 Master1 主机宕机后,Master2 主机负责写请求,Master1 、 Master2 互为备机。

10.1.1.10 :mycat 服务器

10.1.1.30 :master1

10.1.1.40 :master2

10.1.1.50 :slave1

10.1.1.60 :slave2

(2) 主库配置:

① master1(10.1.1.30)

● 修改配置文件:

vim /etc/my.cnf

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 2^32-1,默认为1

server-id=1

#指定同步的数据库

binlog-do-db=db01

binlog-do-db=db02

binlog-do-db=db03

# 在作为从数据库的时候,有写入操作也要更新二进制日志文件

log-slave-updates

log-slave-updates:双主双从结构下,两个主库不仅互为对方的从库,也有自己的从库,slave1、2需要读取master1、2的二进制日志文件保证数据同步。

● 重启mysql服务器:systemctl restart mysqld

● 创建账户并授权:

CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY'6666' ;

GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';

查看二进制日志坐标:

② master2(10.1.1.40)

配置步骤与master1类似:

vim /etc/my.cnf

server-id=3

binlog-do-db=db01

binlog-do-db=db02

binlog-do-db=db03

log-slave-updates

systemctl restart mysqld

CREATE USER 'itcast'@'%' IDENTIFIED WITH mysql_native_password BY'6666' ;

GRANT REPLICATION SLAVE ON *.* TO 'itcast'@'%';

(3) 从库配置:

① slave1(10.1.1.50)

● 修改配置文件

vim /etc/my.cnf

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 23^2-1,默认为1

server-id=2

systemctl restart mysqld

● 关联对应的主库:

CHANGE MASTER TO MASTER_HOST='10.1.1.30', MASTER_USER='itcast', MASTER_PASSWORD='6666', MASTER_LOG_FILE='binlog.000010', MASTER_LOG_POS=663;

● 启动主从复制,查看从库状态:

start slave;

show slave status \G;

② slave2(10.1.1.60)

● 修改配置文件

vim /etc/my.cnf

#mysql 服务ID,保证整个集群环境中唯一,取值范围:1 – 23^2-1,默认为1

server-id=4

systemctl restart mysqld

● 关联对应的主库:

CHANGE MASTER TO MASTER_HOST='10.1.1.40', MASTER_USER='itcast', MASTER_PASSWORD='6666', MASTER_LOG_FILE='binlog.000009', MASTER_LOG_POS=663;

● 启动主从复制,查看从库状态:

start slave;

show slave status \G;

(4) 两台主库互相复制:

① master1:

CHANGE MASTER TO MASTER_HOST='10.1.1.40', MASTER_USER='itcast', MASTER_PASSWORD='6666', MASTER_LOG_FILE='binlog.000009', MASTER_LOG_POS=663;

start slave;

show slave status \G;

② master2:

CHANGE MASTER TO MASTER_HOST='10.1.1.30', MASTER_USER='itcast', MASTER_PASSWORD='6666', MASTER_LOG_FILE='binlog.000010', MASTER_LOG_POS=663;

start slave;

show slave status \G;

(5) 测试:

在master1上创库创表,插入数据:

create database db01;

use db01;



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');



insert into tb_user(id,name,sex) values(4,'Jack Ma','1');

insert into tb_user(id,name,sex) values(5,'Coco','0');

insert into tb_user(id,name,sex) values(6,'Jerry','1');

2、双主双从读写分离:

(1) 介绍:

MyCat控制后台数据库的读写分离和负载均衡由schema.xml文件datahost标签的balance属性控制,通过writeType及switchType来完成失败自动切换的。

(2) 配置:

① 配置 schema.xml:

配置逻辑库和数据节点:

配置节点主机:

● balance="1" :代表全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,即 M2,S1,S2 都参与 select 语句的负载均衡。

● writeType 0:写操作都转发到第1台writeHost,writeHost1挂了会切换到writeHost2上;1:所有的写操作都随机地发送到配置的writeHost上。

● switchType -1 : 不自动切换 ;1 : 自动切换。

② 修改 server.xml:

③ 重启启动mycat进行测试:

当主节点master1宕机后,在mycat上执行insert和select操作均不受影响,说明双主双从读写分离配置成功。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值