it编程 > 数据库 > Mysql

MySQL读写分离的项目时间实践

10人参与 2025-03-06 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操作均不受影响,说明双主双从读写分离配置成功。

到此这篇关于mysql读写分离的项目时间实践的文章就介绍到这了,更多相关mysql读写分离内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

MyCat 垂直分片和水平拆分的实现

03-06

MySQL中如何开启二进制日志(Binlog)

03-06

MySQL修改密码的四种方式详解

03-06

mysqlbinlog查看日志[ERROR]unknown variable ‘default-character-set=utf8’

03-08

两个windows服务器使用canal实现mysql实时同步

03-08

MySQL对字符串使用STR_TO_DATE()函数详解

03-09

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论