当前位置: 首页 > news >正文

mysql主从复制和读写分离

在企业应用中,成熟的业务通常数据量都比较大

单台MySQL在安全性、高可用性和高并发方面都无法满足实际的需求

配置多台主从数据库服务器以实现读写分离

所以要做主从服务器,保证安全性

做一写一读服务器,将提升性能

1、什么是读写分离

读写分离,基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。

2、什么时候要读写分离

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

3、主从复制与读写分离

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

主从复制的目的:把在主服务器上输入的同步给从服务器mysql

读写分离的目的:在主服务器上写,在从服务器上读,提高性能

4、mysql支持的复制类型

(1)STATEMENT:基于语句的复制。在服务器上执行sql语句,在从服务器上执行同样的语句,优点:mysql默认采用基于语句的复制,执行效率高。缺点:在高并发情况下,命令顺序会混乱,导致主从服务器的数据不一致
(2)ROW:基于行的复制。把改变的内容复制过去,而不是把命令在从服务器上执行一遍。优点:精确性高,缺点:效率慢,占用空间大
(3)MIXED:混合类型的复制。默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。

5、主从复制的工作过程

  • master(Binlog dump thread)

  • slave(I/O thread 、SQL thread)

  • Master 的一条线程

  • Slave 中的两条线程

(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.搭建 MySQL主从复制

1.主从服务器时间同步

yum install ntp -y
# 安装ntpvim /etc/ntp.conf
# 修改ntp配置文件,在最后添加server 127.127.80.0					
#设置本地是时钟源,注意修改网段
fudge 127.127.80.0 stratum 8				
#设置时间层级为8(限制在15内)service ntpd start
# 启动时间同步

yum install ntp ntpdate -y
# 从服务器安装service ntpd start
/usr/sbin/ntpdate 192.168.64.10			
# 和主服务器进行时间同步crontab -e
# 设置定时任务
*/30 * * * * /usr/sbin/ntpdate 192.168.64.10
# 每半小时执行一次时间同步

2.主服务器的mysql配置

vim /etc/my.cnf
# 在server-id=1下添加log-bin=mysql-bin                #添加,主服务器开启二进制日志
binlog_format=mixed

#选配项    
expire_logs_days=7          #设置二进制日志文件过期时间,默认值为0,表示logs不过期
max_binlog_size=500M    #设置二进制日志限制大小,如果超出给定值,日志就会发生滚                                                  动,默认值是1GB
skip_slave_start=1            #阻止从库崩溃后自动启动复制,崩溃后再自动复制可能会导致数                                              据不一致的

"双1设置",数据写入最安全
innodb_flush_logs_at_trx_commit=1        

                                          #redo log(事务日志)的刷盘策略,每次事务提交时MySQL都会                                              把事务日志缓存区的数据写入日志文件中,并且刷新到磁盘中,                                              该模式为系统默认
sync_binlog=1                   #在进行每1次事务提交(写入二进制日志)以后,Mysql将执行                                                一次fsync的磁盘同步指令,将缓冲区数据刷新到磁盘

systemctl restart mysqldmysql -u root -pabc123
GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.64.%' IDENTIFIED BY '123456';			# 创建用户供服务器登录
FLUSH PRIVILEGES;

3.从服务器的mysql配置

vim /etc/my.cnfserver-id = 2
#修改,注意id与Master的不同,两个Slave的id也要不同
relay-log=relay-log-bin
#开启中继日志,从主服务器上同步日志文件记录到本地
relay-log-index=relay-log-bin.index
#定义中继日志文件的位置和名称,一般和relay-log在同一目录

systemctl restart mysqldmysql -u root -pabc123CHANGE master to master_host='192.168.64.10',master_user='myslave',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=451;
#配置同步,注意 master_log_file 和 master_log_pos 的值要与Master查询的一致

start slave;						#启动同步,如有报错执行 reset slave;
show slave status\G					#查看 Slave 状态

延迟的产生

当主库的TPS并发较高时,由于主库上面是多线程写入的,而从库的SQL线程是单线程的,导致从库SQL可能会跟不上主库的处理速度(生产者比消费者快,导致商品堆积)。

相关文章:

mysql主从复制和读写分离

在企业应用中,成熟的业务通常数据量都比较大 单台MySQL在安全性、高可用性和高并发方面都无法满足实际的需求 配置多台主从数据库服务器以实现读写分离 所以要做主从服务器,保证安全性 做一写一读服务器,将提升性能 1、什么是读写分离 …...

【计算机网络】网络层-数据平面(学习笔记)

一、网络层提供的服务 1、虚电路服务 通讯前建立虚电路,发送前认为选择路径,所以分组沿着同一条虚电路。 特点:带宽固定 2、数据报服务 数据可能沿着不同路径传输 3、网络层的两个层面 数据层面:源主机到目标主机 控制层面&…...

el-collapse 嵌套中 el-checkbox作为标题,选中复选框与el-tree联动

<el-drawertitle"应用授权":visible.sync"menuDrawer"><el-collapse accordion style"padding: 15px"><el-collapse-item v-for"item in platList"><template slot"title"><el-checkbox v-model…...

Ubuntu中还换源 sudo apt-get update更新失败

sudo apt-get update更新失败 1 前提2 编辑3 换源 1 前提 浏览器可以访问百度 如下文章&#xff1a; VMware 中虚拟机没网 2 编辑 输入如下命令&#xff0c;进入换源文件&#xff1a; sudo gedit /etc/apt/sources.list 3 换源 中科大 deb http://mirrors.ustc.edu.cn/ub…...

flutter播放rtmp视频

安装 dependencies:fijkplayer: ^0.11.0使用方法 import package:fijkplayer/fijkplayer.dart; import package:flutter/material.dart;class RtmpPlayerPage extends StatefulWidget {const RtmpPlayerPage({super.key});overrideState<RtmpPlayerPage> createState()…...

stm32 - 中断

stm32 - 中断 概念中断向量表NVIC 嵌套中断向量控制器优先级 中断EXTI概念基本结构例子- 对射式红外传感器计次例子 - 旋转编码器 概念 stm32 支持的中断资源&#xff08;都属于外设&#xff09; EXTITIMADCUSARtSPII2C stm32支持的中断 内核中断 外设中断 中断通道与优先级 一…...

【洛谷 P1216】[USACO1.5] [IOI1994]数字三角形 Number Triangles 题解(动态规划)

[USACO1.5] [IOI1994]数字三角形 Number Triangles 题目描述 观察下面的数字金字塔。 写一个程序来查找从最高点到底部任意处结束的路径&#xff0c;使路径经过数字的和最大。每一步可以走到左下方的点也可以到达右下方的点。 在上面的样例中&#xff0c;从 7 → 3 → 8 →…...

十四天学会C++之第四天(面向对象编程基础)

类和对象是什么&#xff1f; 在C中&#xff0c;类是一种用户定义的数据类型&#xff0c;它可以包含数据成员&#xff08;也就是属性&#xff09;和成员函数&#xff08;也就是方法&#xff09;。类是一种模板或蓝图&#xff0c;用于创建具体的对象。 对象是类的实例&#xff…...

复习Day09:哈希表part02:141.环形链表、142. 环形链表II、454.四数相加II、383赎金信

之前的blog&#xff1a;https://blog.csdn.net/weixin_43303286/article/details/131765317 我用的方法是在leetcode再过一遍例题&#xff0c;明显会的就复制粘贴&#xff0c;之前没写出来就重写&#xff0c;然后从拓展题目中找题目来写。辅以Labuladong的文章看。然后刷题不用…...

Internet通过TCP/IP协议可以实现多个网络的无缝连接

Internet通过TCP/IP&#xff08;Transmission Control Protocol/Internet Protocol&#xff0c;传输控制协议/互联网协议&#xff09;协议实现多个网络的无缝连接。 TCP/IP是Internet的基础通信协议套件&#xff0c;它定义了数据如何在不同网络之间传输和路由&#xff0c;使得…...

互联网Java工程师面试题·Dubbo 篇·第二弹

目录 18、Dubbo 用到哪些设计模式&#xff1f; 19、Dubbo 配置文件是如何加载到 Spring 中的&#xff1f; 20、Dubbo SPI 和 Java SPI 区别&#xff1f; 21、Dubbo 支持分布式事务吗&#xff1f; 22、Dubbo 可以对结果进行缓存吗&#xff1f; 23、服务上线怎么兼容旧版本&…...

(c语言)经典bug

#include<stdio.h> //经典bug int main() { int i 0; int arr[10] {1,2,3,4,5,6,7,8,9,10}; for (i 0; i < 12; i) //越界访问 { arr[i] 0; printf("hehe\n"); } return 0; } 注&#xff1a;输出结果为死循…...

用于工业物联网和自动化的 Apache Kafka、KSQL 和 Apache PLC4

由于单一系统和专有协议&#xff0c;数据集成和处理是工业物联网&#xff08;IIoT&#xff0c;又名工业 4.0 或自动化工业&#xff09;中的巨大挑战。Apache Kafka、其生态系统&#xff08;Kafka Connect、KSQL&#xff09;和 Apache PLC4X 是以可扩展、可靠和灵活的方式实现端…...

1.1.1开发基础-硬件-万用表

​ 1 万用表 万用表又叫多用表、三用表、复用表,是一种多功能、多量程的测量仪表,一般万用表可测量直流电流、直流电压、交流电压、电阻和音频电平等,有的还可以测交流电流、电容量、电感量及半导体的一些参数,是最常用、最简单的测试设备。 万用表是一种多功能多量程的便…...

Mysql内置函数、复合查询和内外连笔记

目录 一、mysql内置函数 1.1.日期函数 1.2.字符串函数 1.3.数学函数 1.4.其他函数 二、复合查询 2.2 自连接 2.3 子查询 2.3.1单行自查询 2.3.2 多行子查询 2.3.3 多列子查询 2.3.4在from子句中使用子查询 2.3.5合并查询 三、表的内连和外连 3.1内连接 3.2外连接…...

【VUE·疑难问题】定义 table 中每行的高度(使用 element-UI)

一、如何定义 table 中每一行的 height &#xff1f; 1.table例子 <!-- 二、table --><div style"overflow: hidden;display: block;height: 68vh;width: 100%;"><el-table stripe show-header style"width: 100%" :data"tableData&q…...

【重拾C语言】四、循环程序设计(后判断条件循环、先判断条件循环、多重循环;典例:计算平均成绩、打印素数、百钱百鸡问题)

目录 前言 四、循环程序设计 4.1 计算平均成绩——循环程序 4.1.1 后判断条件的循环 a. 语法 b. 典例 4.1.2 先判断条件的循环 a. 语法 b. 典例 4.1.3 for语句 a. 语法 b. 典例 4.2 计算全班每人平均成绩—多重循环 4.2.1 打印100以内素数 4.2.2 百钱百…...

Linux 安装 Gitlab

1、到官网下载Gitlab安装包 (如果是Centos&#xff0c;到el目录下载)。下载GitLab 2、安装依赖软件 sudo yum install -y policycoreutils-python3、安装gitlab sudo rpm -i gitlab-jh-16.3.4-jh.0.el7.x86_64.rpm 4、修改 gitlab.rb sudo vi /etc/gitlab/gitlab.rb 5、g…...

stm32-SPI协议

SPI协议详解&#xff08;图文并茂超详细&#xff09; SPI通讯协议 于是我们想有没有更好一点的串行通讯方式&#xff1b;相比较于UART&#xff0c;SPI的工作方式略有不同。 SPI是一个同步的数据总线&#xff0c;也就是说它是用单独的数据线和一个单独的时钟信号来保证发送端和…...

想要精通算法和SQL的成长之路 - 并查集的运用和案例(省份数量)

想要精通算法和SQL的成长之路 - 并查集的运用 前言一. 并查集的使用和模板1.1 初始化1.2 find 查找函数1.3 union 合并集合1.4 connected 判断相连性1.5 完整代码 二. 运用案例 - 省份数量 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 并查集的使用和模板 先说一下并查集…...

终极代码统计指南:cloc压缩包分析与Git版本对比实战

终极代码统计指南&#xff1a;cloc压缩包分析与Git版本对比实战 【免费下载链接】cloc cloc counts blank lines, comment lines, and physical lines of source code in many programming languages. 项目地址: https://gitcode.com/gh_mirrors/cl/cloc cloc是一款强大…...

Bunge组织架构重组:农业巨头的战略转型解析

1. 全球农业巨头Bunge的组织架构重组解析2017年11月&#xff0c;总部位于纽约白原市的Bunge Limited&#xff08;NYSE: BG&#xff09;宣布了一项重大组织架构调整&#xff0c;将原有的五个运营公司模式精简为三个地理区域——北美、南美和欧洲/亚洲。作为在40多个国家拥有约32…...

5G O-RAN中AI驱动的延迟预测系统设计与优化

1. 项目背景与核心价值在5G O-RAN架构中&#xff0c;延迟控制一直是网络优化的核心痛点。传统电信设备厂商采用的黑盒方案&#xff0c;使得运营商难以针对特定场景进行精细化调优。而O-RAN的开放特性虽然带来了灵活性&#xff0c;但也引入了新的挑战——当CU&#xff08;集中单…...

DelphiOpenAI:原生集成OpenAI API,赋能Delphi开发者构建智能应用

1. 项目概述&#xff1a;DelphiOpenAI&#xff0c;一个为Delphi开发者打造的AI桥梁如果你是一名Delphi开发者&#xff0c;看着Python、JavaScript社区热火朝天地集成各种AI能力&#xff0c;自己却苦于没有成熟、好用的原生库&#xff0c;只能望“AI”兴叹&#xff0c;那么今天介…...

Windows平台PDF处理终极解决方案:Poppler预编译包深度解析

Windows平台PDF处理终极解决方案&#xff1a;Poppler预编译包深度解析 【免费下载链接】poppler-windows Download Poppler binaries packaged for Windows with dependencies 项目地址: https://gitcode.com/gh_mirrors/po/poppler-windows 在Windows环境下处理PDF文件…...

Jeandle:基于LLVM的Java JIT编译器架构解析与实战

1. 项目概述与核心价值最近在Java性能优化这个老生常谈的话题里&#xff0c;我又看到了一个新面孔——Jeandle。简单来说&#xff0c;这是一个基于OpenJDK和LLVM构建的Java即时编译器。如果你对JVM的JIT&#xff08;Just-in-Time Compilation&#xff09;机制有所了解&#xff…...

W4A4量化技术:OSC框架如何实现高效LLM部署

1. OSC框架&#xff1a;硬件高效的W4A4量化革命在大型语言模型(LLM)部署领域&#xff0c;4-bit量化(W4A4)正成为突破算力瓶颈的关键技术。传统8-bit量化虽已成熟&#xff0c;但当我们将精度压缩至4-bit时&#xff0c;激活张量中的异常值(Outliers)会像"黑洞"般吞噬有…...

终极暗黑2存档编辑器:5分钟学会免费修改d2s文件的完整指南

终极暗黑2存档编辑器&#xff1a;5分钟学会免费修改d2s文件的完整指南 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 你是否曾因暗黑破坏神2的角色属性分配不当而懊恼&#xff1f;是否因稀有装备难以获取而沮丧&#xff1f;d2s…...

利用示波器直方图功能低成本测量信号抖动的方法与实践

1. 项目概述&#xff1a;用直方图低成本测量抖动在嵌入式系统、高速数字接口乃至电机控制的设计与调试中&#xff0c;信号抖动&#xff08;Jitter&#xff09;的测量和分析是一个绕不开的坎。无论是为了确保通信链路的误码率&#xff0c;还是为了验证时钟信号的纯净度&#xff…...

高速SerDes设计中BER预测的智能应力输入方法

1. 高速串行链路设计中的BER预测挑战在当今高速数字系统设计中&#xff0c;SerDes&#xff08;串行器/解串器&#xff09;技术已成为主流接口方案&#xff0c;数据传输速率已突破10Gbps大关。随着速率提升&#xff0c;信号完整性(SI)问题日益突出&#xff0c;其中误码率(BER)预…...