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

mysql主从复制与读写分离

mysql主从复制与读写分离

MySQL主从复制是一种常见的数据复制技术,用于将一个MySQL数据库服务器的数据复制到其他服务器上。

单台mysql在安全性,高并发方面都无法满足实际需求

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

读写分离,主数据库的处理增,改,删操作,从尔数据库select查询操作,数据库复制被用来把事务性操作导致的变更到同步集群的数据库。

 读写分离?

数据库的写操作比较耗时

数据库的写入影响了查询速度

什么时候读写分离?

数据库主从同步,再通过读写分离可分担数据库压力,提高性能。

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

 1)master节点会将数据的盖面记录成二进制日志,当master上的数据发生改变时,则将其改变写入二进制日志中

2)Slave节点会在一定时间间隔内对Master的二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/O线程请求Master的二进制事件

3)同时Master节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至Slave节点本地的中继日志(Relay log)中,Slave节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,即解析成SQL语句逐一执行,使得其数据和Master节点的保持一致,最后I/O线程和SQL线程将进入睡眠状态,等待下一次被唤醒。

ps:

中继日志通常会位于OS缓存中,所以中继日志的开销很小

复制过程有一个很重要的限制,即复制在Slave上是串行化,也就是说Master上的并行更新操作不能在Slave上并行操作。

简述原理

主开启二进制日志从开启中继日志,数据的写入操作在主服务器上进行

主服务器所有写入操作写入二进制日志程

从开启io线程请求向主服务器二进制日志事件/记录

主为每个io线程开启dump线程向从发送二进制事件

从保存二进制日志事件到中继日志

从开启sql线程读取中继日志中的二进制事件并解析成sql语句进行转发/逐一执行

chrony也是时间同步服务

systemctl status chrony

ntp服务来做时间同步

yum -y install ntp ntpdate

vim /etc/ntp.conf

server 127.127.232.0

fugde 123.127.232.0 stratum 8(时间层级)

systemctl start ntpd

ntpdate ntp.aliyun.com(同步阿里源)

ntpdate 192.168.232.20

which ntpdate

/usr/bin/ntpdate

crontab -e

 

 双1设置数据谢图最安全

innodb_flush_logs_at_trx_commit=1 #redo log(事务日志)的刷盘策略,每次事务提交mysql都会把事务日志缓存区的数据写入到日志文件中,并刷新到磁盘中,该模式为系统默认

sync_binlog=1

在进行每1次事务提交(写入二进制日志)后,mysql将执行fsync的磁盘同步指令,将缓冲区数据刷新到磁盘

双1设置对安全性要求非常高,而且次磁盘io写能力足够支持的业务

innodb_flush_logs_at_trx_commit=2

每次事务提交时mysql都会把日志缓存区的日志文件中,但是并不会同时刷新到磁盘上,该么事下,mysql会每秒执行一次刷新的磁盘操作

sync_binlog=500 在进行五百次提交后,mysql将进行一次fsync的磁盘同步指令,并将缓冲区刷新到磁盘中

 grant replication slave on *.* to 'myslave' @ '192.168.232.20'

 继服务器

innodb_buffer_pool_size=2048M

用于缓存数据和索引的内存大小,让更多数据写入内存中完成,减少磁盘操作,可设置为服务器可用内存的70%-80%

 vim /etc/my.cnf

binlog_format=maxed

mysql>grant replication slave on *.* to 'myslave' @ '192.168.232.%' indentified by '123123';

mysql>flush privileges;

mysql>show master status;

vim /etc/my.cnf

server-id = 2

relay-log=relay-log-bin

relay-log-index=relay-log-bin-index

systemctl restart mysqld

mysql>cahnge master to master_host='192.168.232.30',master_user='myslave',master_password'123123',master_log_file='mysql-bin.00001',mater_log_pos=603;

start slave;

show slave status\G 查看连接状态

查看slave_io_running:yes

slave_sql_running:yes

seconds_behind_master 参数来判断是否发生主从延迟 0一切良好 正值出现延迟,复值bug值

是否是yes

有问题:端口有没有打开

(master_port 指定端口号)

mysql配置文件server_id是否一样

确定change命名是否正确

show databases;

create database kgc;

use kgc;

create table ky27 (id int,name char(10),age int);

insert into ky27 values(1,'yht',28);

mysql主从服务器延迟

 

 使用物理主机提升io性能

如何减少

 

#在主库查询半同步状态

show status like rRpl semi%';

当半同步复制发生超时(由rpl_semi_sync_master_timeout参数控制,默认为1000ms,即1s),会暂时关闭半同步复制,转而使用异步复制,也是会自动降为异步工作。当 master_dump 线程发送完一个事务的所有事件之后,如果在 rpl_semi_sync_master_timeout 内,收到了从库的响应,则主从又重新恢复为半同步复制。

简述

在超时时间内没收到从服务器的回复自动降为异步复制,在一定时间收到回复会升为半同步复制

半同步复制独立出ack collector thread

 负责主会用ack  collector线程来接收从反馈的确认信息

 

读写分离

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

基于程序代码内部实现

代码的读写分离select 从服务器

insert主服务器

基于中间代理层实现

代理一般位于客户端和服务器之间,代理服务器接收到客户端的请求通过判断后转发到后端数据库

mysql-proxy(自带),atlas(360内部),amoeba,mycat(分库分表,配合数据库的主从模式还可以实现读写分离)

相关文章:

mysql主从复制与读写分离

mysql主从复制与读写分离 MySQL主从复制是一种常见的数据复制技术,用于将一个MySQL数据库服务器的数据复制到其他服务器上。 单台mysql在安全性,高并发方面都无法满足实际需求 配置多台主从数据库服务器以实现读写分离 读写分离,主数据库的…...

技术控,看这里,一款支持断点调试的数据科学工具

数据科学是一门利用统计学、机器学习、数据挖掘、数据可视化等技术和方法,从数据中提取知识和信息的交叉学科。自上世纪60年代,统计学家John W.Tukey首次提出“数据分析”(Data Analysis)的概念起,数据科学已历经了几十…...

论文导读 | 大语言模型上的精调策略

随着预训练语言模型规模的快速增长,在下游任务上精调模型的成本也随之快速增加。这种成本主要体现在两方面上:一,计算开销。以大语言模型作为基座,精调的显存占用和时间成本都成倍增加。随着模型规模扩大到10B以上,几乎…...

进阶自动化测试,这3点你一定要知道的...

自动化测试指软件测试的自动化,在预设状态下运行应用程序或系统,预设条件包括正常和异常,最后评估运行结果。将人为驱动的测试行为转化为机器执行的过程。 自动化测试框架一般可以分为两个层次,上层是管理整个自动化测试的开发&a…...

网络编程套接字API

一. linux平台 1.创建套接字 成功返回文件描述符,失败返回-1 int socket (int __domain, int __type, int __protocol) ;2.套接字绑定IP地址和端口号 成功返回0,失败返回-1 int bind (int __fd, __CONST_SOCKADDR_ARG __addr, socklen_t __len);3.开启…...

数字藏品的价值和意义

2022年以来,数字藏品概念在国内火热起来。从年初的《关于防范 NFT相关金融风险的倡议》到8月份央行数字货币 DCEP的正式面世,从中国香港首个“NFT”艺术品在香港拍卖市场成交到国内多家互联网大厂推出数字藏品平台,越来越多的企业开始试水数字…...

Unity物理系统脚本编程(上)

一、获取刚体组件Rigidbody 当一个物体挂载了刚体时&#xff0c;即可在脚本中获取该物体的刚体组件&#xff0c;代码如下 Rigidbody rigid; void Start() { rigidGetComponent<Rigidbody>(); } 一般将刚体变量命名为rigid并定义为一个字段&#xff0c;方便复用. 二、施…...

Java基础(十七)File类与IO流

1. java.io.File类的使用 1.1 概述 File类及本章下的各种流&#xff0c;都定义在java.io包下。一个File对象代表硬盘或网络中可能存在的一个文件或者文件目录&#xff08;俗称文件夹&#xff09;&#xff0c;与平台无关。&#xff08;体会万事万物皆对象&#xff09;File 能新…...

跑步课程导入能力,助力科学训练

HUAWEI Health Kit为开发者提供用户自定义的跑步课程导入接口&#xff0c;便于用户在华为运动健康App和华为智能穿戴设备上查看来自生态应用的训练课表&#xff0c;开启科学、适度的运动训练。 跑步课程导入能力支持生态应用在获取用户的华为帐号授权后&#xff0c;将跑步课程…...

MySQL---8、创建和管理表

1、基础知识 1.1 一条数据存储的过程 创建数据库-->确认字段-->创建数据表-->插入数据1.2 标识符的命名规则 1、数据库名、表名不得超过30个字符&#xff0c;变量名限制为29个 2、必须只能包含A-Z、a-z、0-9,、_共63个字符 3、数据库名、表名、字段名等对象名中间不…...

图像分类简单介绍

文章目录 图像分类简单介绍什么是图像分类图像分类的背景和意义传统的图像分类方法基于深度学习的图像分类方法总结 图像分类简单介绍 图像分类是计算机视觉领域的一个基本任务&#xff0c;其目标是将输入的图像分配给某个预定义的类别&#xff08;即标签&#xff09;。在本教…...

很多博主用Markdown格式文章?直呼真不错!

概述 Markdown 是一种轻量级标记语言&#xff0c;它可以使我们专注于写作内容&#xff0c;而不用过多关注排版&#xff0c;很多博主、作家等都用它来撰写文章~ 本文将给各位小伙伴介绍 Markdown 语法的使用&#xff0c;本篇文章索奇就是用的纯 markdown 语法来写的~ 标题 一级…...

【2023/05/07】汇编语言

Hello&#xff01;大家好&#xff0c;我是霜淮子&#xff0c;2023倒计时第2天。 Share Stray birds of summer come to my window to sing and fly away. And yellow leaves of autumn,which have no songs,flutter and full there with a sigh. 译文&#xff1a; 夏天的鸟&…...

AI 生成第3篇测试文章:怎么编写测试计划?

背景 在软件开发过程中&#xff0c;测试是十分重要的环节&#xff0c;测试计划是测试的基础和重要的组成部分。一个完善的测试计划能够指导测试工作&#xff0c;明确测试范围和要求&#xff0c;提高测试效率&#xff0c;保证软件质量和可靠性。本文将从测试计划的定义、编写步…...

怎么洗稿容易过稿-在线洗稿软件

自媒体洗稿软件 即使您是一位优秀的自媒体写作人员&#xff0c;也难免遇到让人头疼的撰写问题&#xff0c;例如无法处理大量原始文本、需要手动删除冗余信息、缺少时间针对每篇文章进行深入修改等问题。但是&#xff0c;现在有了我们的一款自媒体洗稿软件&#xff0c;您再也不需…...

图书馆客流人数统计分析系统方案

智慧客流人数统计分析系统可以帮助图书馆管理者更好地管理人群流量。系统能够自动统计区域内的人流量高峰期&#xff0c;并通过数据分析提供更加合理的管控&#xff0c;从而提区域内人群流动性&#xff0c;避免拥堵的情况。 AI客流视觉监控 客流量管控分析系统意义 讯鹏客流量管…...

linux命令之crontab详解

crontab 提交和管理用户的需要周期性执行的任务 更多linux命令详解&#xff1a;linux命令在线工具 补充说明 crontab命令 被用来提交和管理用户的需要周期性执行的任务&#xff0c;与windows下的计划任务类似&#xff0c;当安装完成操作系统后&#xff0c;默认会安装此服务工…...

浅谈一下接口工具(jmeter、postman、swagger等)

一、接口都有哪些类型&#xff1f; 接口一般分为两种&#xff1a;1.程序内部的接口 2.系统对外的接口 系统对外的接口&#xff1a;比如你要从别的网站或服务器上获取资源或信息&#xff0c;别人肯定不会把 数据库共享给你&#xff0c;他只能给你提供一个他们写好的方法来获取…...

面试题:react、 vue中的key有什么作用? (key的内部原理)

面试题:react、 vue中的key有什么作用? &#xff08;key的内部原理) 1.虚拟DOM中key的作用: key是虚拟DOM对象的标识&#xff0c;当状态中的数据发生变化时&#xff0c;Vue会根据【新数据】生成【新的虚拟DON】,随后Vue进行【新虚拟DOM】与【旧虚拟DOM】的差异比较&#xff0…...

C++之继承

目录 一、继承的概念及定义 1.1继承的概念 1.2继承的定义 1.2.1继承的格式 1.2.2继承基类成员访问方式的变化 二、基类和派生类对象赋值转换 三、继承中的作用域 4.派生类的默认成员函数 五、继承与友元 六、继承与静态成员 七、菱形继承及菱形虚拟继承 7.1菱形继承的问…...

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查

在对接支付宝API的时候&#xff0c;遇到了一些问题&#xff0c;记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制&#xff08;1&#xff09;三次握手①握手过程②对握手过程的理解 &#xff08;2&#xff09;四次挥手&#xff08;3&#xff09;握手和挥手的触发&#xff08;4&#xff09;状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

NFT模式:数字资产确权与链游经济系统构建

NFT模式&#xff1a;数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新&#xff1a;构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议&#xff1a;基于LayerZero协议实现以太坊、Solana等公链资产互通&#xff0c;通过零知…...

【HTTP三个基础问题】

面试官您好&#xff01;HTTP是超文本传输协议&#xff0c;是互联网上客户端和服务器之间传输超文本数据&#xff08;比如文字、图片、音频、视频等&#xff09;的核心协议&#xff0c;当前互联网应用最广泛的版本是HTTP1.1&#xff0c;它基于经典的C/S模型&#xff0c;也就是客…...

AspectJ 在 Android 中的完整使用指南

一、环境配置&#xff08;Gradle 7.0 适配&#xff09; 1. 项目级 build.gradle // 注意&#xff1a;沪江插件已停更&#xff0c;推荐官方兼容方案 buildscript {dependencies {classpath org.aspectj:aspectjtools:1.9.9.1 // AspectJ 工具} } 2. 模块级 build.gradle plu…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中&#xff0c;理解API&#xff08;应用程序接口&#xff09;和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能&#xff0c;使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...

JavaScript 数据类型详解

JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型&#xff08;Primitive&#xff09; 和 对象类型&#xff08;Object&#xff09; 两大类&#xff0c;共 8 种&#xff08;ES11&#xff09;&#xff1a; 一、原始类型&#xff08;7种&#xff09; 1. undefined 定…...