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

 更新时间:2025年03月06日 10:58:24   作者:Bean295  
本文主要介绍了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读写分离内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql 8.0.25 安装配置方法图文教程

    mysql 8.0.25 安装配置方法图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.25 安装配置方法图文教程,文中安装步骤介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-07-07
  • Mysql联合索引的原理与实现

    Mysql联合索引的原理与实现

    联合索引是一种将多个列组合成一个索引的技术,以提高基于这些列进行查询的性能,本文主要介绍了Mysql联合索引的原理与实现,具有一定的参考价值,感兴趣的可以了解一下
    2024-08-08
  • Mysql配置主从复制-GTID模式详解

    Mysql配置主从复制-GTID模式详解

    这篇文章主要介绍了Mysql配置主从复制-GTID模式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-04-04
  • mysql8如何设置不区分大小写ubuntu20

    mysql8如何设置不区分大小写ubuntu20

    这篇文章主要介绍了mysql8如何设置不区分大小写ubuntu20问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • CentOS 7下安装与配置MySQL 5.7

    CentOS 7下安装与配置MySQL 5.7

    Mysql5.7和之前版本的MySQL有一些不同,现把CentOS 7下MySQL 5.7安装、配置完整过程记下来,或许对新手来说有用。希望大家能够喜欢
    2018-01-01
  • 读取mysql一个库下面的所有的表table

    读取mysql一个库下面的所有的表table

    本文给大家分享的是如何使用php实现读取mysql一个库下面的所有的表table的代码,有需要的小伙伴可以参考下
    2016-12-12
  • sql跨表查询的三种方案总结

    sql跨表查询的三种方案总结

    这篇文章主要介绍了sql跨表查询的三种方案总结,文章围绕主题展开详细的内容,具有一定的参考价值,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-08-08
  • SQL中字符串截取函数图文教程

    SQL中字符串截取函数图文教程

    在SQL的实际用途中,经常会碰到需要对查询结果值需要做字段的一些截取,下面这篇文章主要给大家介绍了关于SQL中字符串截取函数的相关资料,需要的朋友可以参考下
    2023-01-01
  • MySQL事务(transaction)看这篇就足够了

    MySQL事务(transaction)看这篇就足够了

    M事务的实现是基于数据库的存储引擎,不同的存储引擎对事务的支持程度不一样,下面这篇文章主要给大家介绍了关于MySQL事务(transaction)的相关资料,需要的朋友可以参考下
    2022-11-11
  • Mysql数据库乱码问题的对应方式

    Mysql数据库乱码问题的对应方式

    今天小编就为大家分享一篇关于Mysql数据库乱码问题的对应方式,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12

最新评论