【数据库七】MySQL主从复制与读写分离

news/2024/11/28 5:31:30/

MySQL主从复制与读写分离

  • 1.案例概述
  • 2.什么是读写分离?
  • 3.为什么要读写分离呢?
  • 4.什么时候要读写分离?
  • 5.主从复制与读写分离
  • 6.MySQL主从复制原理
    • 6.1 mysql的复制类型
  • 7.主从复制的工作过程
    • 7.1 MySQL架构图
    • 7.2 口语化工作工程
  • 8.MySQL 读写分离原理
  • 9.案例实施:搭建MySQL主从复制
    • 9.1 主节点服务器(CentOS 7-5)
    • 9.2 从节点服务器(CentOS 7-6)
    • 9.3 从节点服务器(CentOS 7-7)
    • 9.4 验证主从服务器

1.案例概述

  • 在企业应用中,成熟的业务通常数据量都比较大
  • 单台MySQL在安全性、高可用性和高并发方面都无法满足实际的需求
  • 配置多台主从数据库服务器以实现读写分离

2.什么是读写分离?

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(insert、update、delete),而从数据库处理select查询操作数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库

3.为什么要读写分离呢?

因为数据库的“写”(写10000条数据可能要3分钟)操作是比较耗时的。
但是数据库的“读”(读10000条数据可能只要5秒钟)。
所以读写分离,解决的是:数据库的写入,影响了查询的效率

4.什么时候要读写分离?

数据库不一定要读写分离,如果程序使用数据库较多时,而更新少,查询多的情况下会考虑使用。利用数据库主从同步,再通过读写分离可以分担数据库压力,提高性能。

5.主从复制与读写分离

在实际的生产环境中,对数据库的读和写都在同一个数据库服务器中,是不能满足实际需求的。无论是在安全性、高可用性还是高并发等各个方面都是完全不能满足实际需求的。因此,通过主从复制的方式来同步数据,再通过读写分离来提升数据库的并发负载能力。有点类似于rsync,但是不同的是rsync是对磁盘文件做备份,而mysql主从复制是对数据库中的数据、语句做备份

6.MySQL主从复制原理

6.1 mysql的复制类型

———— mysql的主从复制类型是基于二进制日志类型来实现的。

(1)STATEMENT:基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,mysql默认采用基于语句的复制,执行效率高。但是高并发情况下,会出现SQL语句执行顺序紊乱的错误。
(2)ROW:基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。
(3)MIXED:混合类型的复制默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制

在这里插入图片描述

7.主从复制的工作过程

7.1 MySQL架构图

在这里插入图片描述

(1)Master节点将数据的改变记录成二进制日志(bin log),当Master上的数据发生改变时,则将其改变写入二进制日志中
(2)Slave节点会在一定时间间隔内对Master的二进制日志进行探测,其是否发生改变,如果发生改变,则开始一个I/O线程请求Master的二进制事件
(3)同时Master节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至Slave节点本地的中继日志(Relay log)中,Slave节点将启动SQL线程从中继日志中读取二进制日志.在本地重放,即解析成SQL语句逐一执行,使得其数据和Master节点的保持一致,最后I/O线程和SQL线程将进入睡眠状态,等待下一次被唤醒

7.2 口语化工作工程

在这里插入图片描述
两个日志、三个线程:
Master节点:二进制日志、dump线程
Slave节点:中继日志、I/O线程、SQL线程

口语化理解主从复制的工作工程:
(1)客户端在主服务器上执行写入操作,相关的操作记录则会根据二进制日志的格式,写入到二进制日志文件中
(2)从服务器检测到二进制日志发生改变,就会开启I/O线程向主节点请求二进制日志事件
(3)主节点接收到I/O线程之后,会开启dump线程,向从服务器发送二进制日志事件
(4)从服务器接收到主服务器发来的二进制日志事件后,会将二进制日志事件保存到自己的中继日志中
(5)从服务器开启SQL线程读取中继日志中的二进制事件,并解析成SQL语句在本地逐一进行执行,从而实现主从服务器的数据同步。

注意:

  • 中继日志通常会位于OS缓存中,所以中继日志的开销很小。
  • 复制过程有一个很重要的限制,即复制在Slave上是串行化的,也就是说Master上的并行更新操作不能在Slave上并行操作

8.MySQL 读写分离原理

读写分离就是只在主服务器上写,只在从服务器上读。基本的原理是让主数据库处理事务性操作,而从数据库处理select查询。数据库复制被用来主数据库上事务性操作导致的变更同步到集群中的从数据库

9.案例实施:搭建MySQL主从复制

在这里插入图片描述

9.1 主节点服务器(CentOS 7-5)

###关闭和禁止防火墙开机自启功能
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled

(1)搭建时间同步服务器

rpm -q ntp ntpdate
vim /etc/ntp.conf
restrict default nomodify
server ntp.aliyun.comntpdate ntp.aliyun.com  #查看aliyun时间同步服务器
ntpq -p
systemctl restart ntpd   #重启ntp时间服务

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
(2)修改/etc/my.cnf文件,开启二进制日志

vim /etc/my.cnf
server-id = 1  #设置主服务器的id号为1
log-bin=mysql-bin
binlog_format=mixedsystemctl restart mysqld

在这里插入图片描述
(3)添加允许从服务器复制的用户名和密码

mysql -uroot -p123
grant replication slave on *.* to 'myslave'@'%' identified by '123';
flush privileges;
show master status;

在这里插入图片描述

9.2 从节点服务器(CentOS 7-6)

###关闭和禁止防火墙开机自启功能
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vim /etc/selinux/config
SELINUX=disabled

(1)设置计划性任务,使从服务器与主服务器保持时间同步

ntpdate 192.168.80.50    #连接主服务器的IP地址
crontab -e   #在从服务器上执行计划性任务,每30分钟向主服务器进行一次时间同步
*/30 * * * * /usr/sbin/ntpdate 192.168.80.50systemctl restart crond   #重启计划性服务
crontab -l   #查看计划性任务

在这里插入图片描述

(2)修改/etc/my.cnf配置文件,开启从服务器的中继日志

vim /etc/my.cnf
server-id = 2
relay-log=relay-log-bin
relay-log-index=relay-log-bin.indexsystemctl restart mysqld

在这里插入图片描述
(3)设置从服务器连接复制主服务器的二进制日志数据

mysql -uroot -p123
change master to master_host='192.168.80.50',master_port=3306,master_user='myslave',master_password='123',master_log_file='mysql-bin.000001',master_log_pos=592;
start slave;
show slave status\G
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.80.50Master_User: myslaveMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000001Read_Master_Log_Pos: 592Relay_Log_File: relay-log-bin.000002Relay_Log_Pos: 320Relay_Master_Log_File: mysql-bin.000001Slave_IO_Running: Yes  #查看到I/O进程和SQL进程都为Yes,表示主从服务器同步复制成功Slave_SQL_Running: Yes

在这里插入图片描述

9.3 从节点服务器(CentOS 7-7)

实验步骤操作同CentOS 7-6完全一样,此处省略!!!

9.4 验证主从服务器

(1)在主服务器中添加数据记录

在这里插入图片描述
(2)在从服务器中查看数据记录是否同步发生更改
在这里插入图片描述
在这里插入图片描述


http://www.ppmy.cn/news/535651.html

相关文章

构建安全架构的 Azure 云:深入了解零信任体系结构

文章目录 前言一、零信任安全模型的概念以及背景介绍二、传统安全模型(边界模型)三、零信任模型(现阶段主流云厂商策略)四、Azure 中的零信任体系结构(本文重点)4.1 基础知识点(必须了解&#x…

修改及刷写蓝魔V3 value MP3固件心得

刷写蓝魔V3 value MP3固件心得 出于无聊网购了一台蓝魔V3 value 来听,拿来之后发现有诸多的不足之处,于是想修改下固件,从官方网上下载来了固件和刷机工具。结果发现原来的ResEdit V2.0已经无法胜任此修改了,知道是蓝魔固件进行过…

蓝魔RM990 RK2706工具集

今天意外的本来想出去买条音频线的时候,带上P4,结果发现触摸屏不能用了。 于是,就再次准备刷固件了。 好吧,就这样把自己所有的电子设备貌似都刷了一遍机了。又再次DIY了一次。 然后总结了一下,自己就这样。首先是笔…

bluestore

BlueStore BlueStore 架构及原理分析 Ceph 底层存储引擎经过了数次变迁,目前最常用的是 BlueStore,在 Jewel 版本中引入,用来取代 FileStore。与 FileStore 相比,Bluesore 越过本地文件系统,直接操控裸盘设备&#x…

魔改浏览器指纹

什么是浏览器指纹 "浏览器指纹"是一种通过浏览器对网站可见的配置和设置信息来跟踪Web浏览器的方法,浏览器指纹就像我们人手上的指纹一样,具有个体辨识度,只不过现阶段浏览器指纹辨别的是浏览器。它是获取浏览器具有辨识度的信息,进行一些计算得出一个值,那么这…

蓝魔的眼泪

蓝魔的眼泪 永远磨不去的回忆在那么一天在网上和一个美女聊上拉聊拉一个月啊,就在那么的一天就这样开始拉,当时在一起很开心在一起无事不谈,但是想起来啊滴下一滴珍贵的泪花.结果始终网恋永远经受不起考验最终只是分离。两人在拉6个月吧我看到…

(二十七)深入理解蓝牙BLE之“Nordic官网介绍”

目录 1. Nordic官网及资料下载 2. Nordic infocenter(文档中心) 3. Nordic Devzone(开发者论坛) 4. Nordic Github 转载原地址:http://t.zoukankan.com/iini-p-8993978.html 1. Nordic官网及资料下载 Nordic官网主…

区块链之web1.0、web2.0、web3.0、特点、示例、出现的问题

一、 Web 1.0(静态网页) 时间范围:1990年代中期到2000年代初 特点:只读 静态网页:网页内容的呈现和更新需要手动进行,缺乏交互性和动态性信息消费者:通过浏览网页来获取信息,无法参…