java八股文面试[数据库]——mysql主从复制

news2024/10/5 16:22:22
什么是mysql的主从复制?

        MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表

mysql为什么需要主从同步?

1、在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

2、做数据的热备

3、架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能

4、解决主库的单点故障

主从复制相关线程和文件
# 线程
    dump线程:主库上的线程,从binlog中取出数据交给从库的IO线程
    IO线程:从库上的线程,连接主库dump线程取数据,取到数据写入缓存(relay log中)
    SQL线程:从库上的线程,执行relay log中的SQL语句到数据库中
    
# 文件
    binlog日志:主库上的文件,记录所有更改库表的语句
    master.info:从库上的文件,记录主库的binlog名字和位置点,IO线程更新/读取
    relay-log.info:从库上的文件,记录relay-log里的位置点,上一次SQL线程读取到哪里了,SQL线程更新/读取
    relay-log:从库上的文件,记录从主库binlog拿来的新数据

mysql复制原理是什么?

(1)master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中;

(2)slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件

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

也就是说:

  • 从库会生成两个线程,一个I/O线程,一个SQL线程;

  • I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;

  • 主库会生成一个log dump线程,用来给从库I/O线程传binlog;

  • SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行;

注意:

1--master将操作语句记录到binlog日志中,然后授予slave远程连接的权限(master一定要开启binlog二进制日志功能;通常为了数据安全考虑,slave也开启binlog功能)。

2--slave开启两个线程:IO线程和SQL线程。其中:IO线程负责读取master的binlog内容到中继日志relay log里;SQL线程负责从relay log日志里读出binlog内容,并更新到slave的数据库里,这样就能保证slave数据和master数据保持一致了。

3--Mysql复制至少需要两个Mysql的服务,当然Mysql服务可以分布在不同的服务器上,也可以在一台服务器上启动多个服务。

4--Mysql复制最好确保master和slave服务器上的Mysql版本相同(如果不能满足版本一致,那么要保证master主节点的版本低于slave从节点的版本)

5--master和slave两节点间时间需同步

具体步骤:

1、从库通过手工执行change master to 语句连接主库,提供了连接的用户一切条件(user 、password、port、ip),并且让从库知道,二进制日志的起点位置(file名 position 号); start slave

2、从库的IO线程和主库的dump线程建立连接

3、从库根据change master to 语句提供的file名和position号,IO线程向主库发起binlog的请求

4、主库dump线程根据从库的请求,将本地binlog以events的方式发给从库IO线程。

5、从库IO线程接收binlog events,并存放到本地relay-log中,传送过来的信息,会记录到master.info

6、从库SQL线程应用relay-log,并且把应用过的记录到relay-log.info中,默认情况下,已经应用过的relay 会自动被清理purge

同步复制(Synchronous replicaton)

同步复制的模式下,主库在提交事务前,必须确认事务在所有的备库上都已经完成提交。即主库是最后一个提交的,在提交前需要将事务传递给从库并完成重放、提交等一系列动作。其优点是任何时候主备库都是一致的,主库的崩溃不会丢失事务,缺点是由于主库需要等待备库先提交事务,吞吐量很低

MySQL的半同步复制

从MYSQL5.5开始,支持半自动复制。之前版本的MySQL Replication都是异步(asynchronous)的,主库在执行完一些事务后,是不会管备库的进度的。如果备库不幸落后,而更不幸的是主库此时又出现Crash(例如宕机),这时备库中的数据就是不完整的。简而言之,在主库发生故障的时候,我们无法使用备库来继续提供数据一致的服务了。

半同步复制(Semi synchronous Replication)则一定程度上保证提交的事务已经传给了至少一个备库
出发点是保证主从数据一致性问题,安全的考虑。

半同步复制介于异步复制和同步复制之间。主库在提交事务时先等待,必须确认至少一个从库收到了事件(从库将事件写入relaylog,不需要重放和提交,并向主库发送一个确认信息ACK),主库收到确认信息后才会正式commit。

与同步复制相比,半同步复制速度快很多,因为他只需要至少1个从库确认写入relaylog,并不需要完成在从库上的事务提交,同时又比异步复制更安全,因为主库在提交时,事务至少已经存在2个地方(主库的binlog和从库的relaylog)。由于半同步复制在提交事务前,需要从库返还确认信息,所以这里涉及到网络的往返通信开销,因此半同步复制只适合在网络条件较好的且地理上距离不远的环境部署,否则可能会因为网络延迟大幅降低主库性能。

半同步复制的特点:

从库在连接主库时需要表明它是否支持半同步复制
如果主库启用了半同步复制,且有一个支持半同步复制的从库,则主库上事务提交将等待至少一个从库确认已收到事务,或者直到发生超时。
默认只有在将事务写入其中继日志刷新到磁盘后,主库才会提交事务(也可以配置成提交后等待确认)。
如果没有任何从库确认事务的情况下发生超时,则主库将退化为异步复制。当至少有一个半同步从库赶上时,主库恢复半同步复制。退化与恢复过程都是自动的。
必须在主库和从库上都启用半同步复制,否则使用异步复制。

三种复制方式比较

异步复制:源将事件写入其二进制日志,副本在准备好时请求它们。源不知道副本是否或何时已检索和处理事务,并且无法保证任何事件都会到达任何副本。使用异步复制,如果源崩溃,它已提交的事务可能不会传输到任何副本。在这种情况下,从源故障转移到副本可能会导致故障转移到缺少与源相关的事务的服务器。

完全同步复制:当源提交事务时,所有副本也必须在源返回到执行事务的会话之前提交事务。完全同步复制意味着可以随时从源故障转移到任何副本。完全同步复制的缺点是完成事务可能会有很多延迟

半同步复制:半同步复制介于异步复制和完全同步复制之间。源等待直到至少一个副本接收并记录了事件(所需的副本数量是可配置的),然后提交事务。源不等待所有副本确认接收,它只需要来自副本的确认,而不是事件已在副本端完全执行并提交。因此,半同步复制保证如果源崩溃,它已提交的所有事务都已传输到至少一个副本。

        与异步复制相比,半同步复制提供了改进的数据完整性,因为当一次提交成功返回时,就知道数据至少存在于两个地方。在半同步源收到来自所需数量的副本的确认之前,事务处于暂停状态且未提交。
        与完全同步复制相比,半同步复制更快,因为它可以配置为平衡您对数据完整性的要求(确认收到事务的副本数)和提交速度,提交速度由于需要等待而较慢复制品。
        对于半同步复制,如果源崩溃并且执行到副本的故障转移,则故障源不应该被重用作为复制源服务器,而应该被丢弃。它可能有任何副本未确认的事务,因此在故障转移之前未提交
        与异步复制相比,半同步复制的性能影响是提高数据完整性的权衡。减速量至少是发送提交到副本并等待副本确认接收的 TCP/IP 往返时间。这意味着半同步复制最适合通过快速网络通信的近距离服务器,而对于通过慢速网络通信的远程服务器最差。半同步复制还通过限制二进制日志事件从源发送到副本的速度来限制繁忙会话的速率。当一个用户太忙时,这会减慢它的速度,这在某些部署情况下很有用。

过滤复制

什么是过滤复制
出现原因
让从节点仅仅复制指定的数据库,或指定数据库的指定数据表。主服务器有10个数据库,而从节点只需要同步其中的一两个数据库。这个时候就需要复制过滤。
复制过滤器可以在主节点中实现,也可以在从节点中实现。
过滤复制选择:
主节点
在主节点的二进制事件日志中仅记录与指定数据库(数据表)相关的事件日志,但是主节点的二进制日志不完整,没有记录所有对主节点的修改操作。(不推荐)
如果要使用该方式,则在主节点的配置文件中添加如下参数:
binlog_do_db=”XXX,XXX,XXX”; #数据库白名单列表
binlog_ingore_db=”XXX,XXX,XXX”; #数据库黑名单列表。
但这两个配置参数不要同时使用。
从节点
从服务器的 SQL Thread在Replay中继日志中的事件时,仅读取于特定数据库(数据表)相关的事件,并应用于本地。(但是浪费I/O ,浪费带宽)推荐使用
从节点复制过滤相关设置项:
replicate_do_db =”“; #复制的白名单
replicate_ingore_db =”“; #复制的黑名单
replicate_do_table=”“;
relicate_ingore_table=”“;
replicate_wild_do_table=”“; #更高级别的应用,通配符,应用到哪一类表的。

知识来源:

MySQL主从复制 - 知乎

MySQL复制(二):半同步复制(Semisynchronous replicaiton)_mysql半同步复制_V1ncent Chen的博客-CSDN博客

MySQL半同步复制_mysql 半同步_intqao的博客-CSDN博客

mysql 复制过滤_MySQL过滤复制_Photosource的博客-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/973416.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SEAN代码(2)

输入image,label分别经过生成器和判别器。 经过生成器计算的是损失和产生的图片。并且在内部损失进行反向传播,优化器进行更新。 在pix2pix_model内部:首先对输入数据进行预处理。 def preprocess_input(self, data):# move to GPU and ch…

【C++进阶(四)】STL大法--list深度剖析list迭代器问题探讨

💓博主CSDN主页:杭电码农-NEO💓   ⏩专栏分类:C从入门到精通⏪   🚚代码仓库:NEO的学习日记🚚   🌹关注我🫵带你学习C   🔝🔝 链表list 1. 前言2. list的使用2.1 list的构造函…

小企业数字化经营模式是什么?

小型企业的数字化经营模式是指这些企业如何利用数字技术和互联网来创造、交付和获取价值。数字化极大地影响了小型企业的运营方式、与客户的互动以及开展业务的方式。以下是小型企业数字化经营模式的一些关键组成部分: 1.在线形象和品牌:通过网站、社交…

【机器视觉】喇叭的外圆以及金属内圆的同心度视觉检测--康耐德智能

客户的需求 检测内容 喇叭的外圆以及金属内圆的同心度测量 检测要求 精度0.02mm,速度没要求,抽检产品。 评估 视觉可行性分析 对贵司的样品进行了光学实验,并进行图像处理,原则上可以使用机器视觉进行测试测量。 结果 对所有样…

【TI毫米波雷达笔记】SOC外设中断监听功能(Listen)初始化配置及驱动(以IWR6843AOP为例)

【TI毫米波雷达笔记】SOC外设中断监听功能&#xff08;Listen&#xff09;初始化配置及驱动&#xff08;以IWR6843AOP为例&#xff09; #include <ti/drivers/soc/soc.h>SOC初始化以后 可以配置监听以配置中断回调来查看当前运行情况&#xff1a; 采用函数SOC_register…

书单怎么制作?有哪些技巧和注意事项?

书单是指将自己喜欢的书籍、影视作品等进行整理和推荐&#xff0c;供他人参考的清单。它可以是一个人的私人书单&#xff0c;也可以是一个团队或者社群共享的书单&#xff0c;我们在一些短视频媒体上应该都有看到过一些制作的书单视频分享&#xff0c;那么如果我们也想上传书单…

7 个适合初学者的项目,可帮助您开始使用 ChatGPT

推荐&#xff1a;使用 NSDT场景编辑器快速搭建3D应用场景 从自动化日常任务到预测复杂模式&#xff0c;人工智能正在重塑行业并重新定义可能性。 当我们站在这场人工智能革命中时&#xff0c;我们必须了解它的潜力并将其整合到我们的日常工作流程中。 然而。。。我知道开始使…

【真题解析】系统集成项目管理工程师 2023 年上半年真题卷(案例分析)

本文为系统集成项目管理工程师考试(软考) 2023 年上半年真题(全国卷),包含答案与详细解析。考试共分为两科,成绩均 ≥45 即可通过考试: 综合知识(选择题 75 道,75分)案例分析(问答题 4 道,75分)案例分析(问答题*4)试题一试题二试题三试题四案例分析(问答题*4) …

SwiftUI实现iPad多任务分屏

1. 概述 iPadOS引入了多任务分屏功能&#xff0c;使用户能够同时在一个屏幕上使用多个应用程序。这为用户提供了更高效的工作环境&#xff0c;可以在同一时间处理多个任务。 iPad多任务分屏有两种常见的模式&#xff1a;1/2分屏和Slide Over&#xff08;滑动覆盖&#xff09;…

sentinel blockHandler不生效

sentinel blockHandler不生效: package org.bc.sentinel.controller;import com.alibaba.csp.sentinel.annotation.SentinelResource; import com.alibaba.csp.sentinel.slots.block.BlockException; import org.apache.commons.lang3.RandomUtils; import org.springfram…

blender 场景灯光基础设置

在 blender 中&#xff0c;打光分为两个部分&#xff0c;一个是世界光&#xff0c;一个是场景光&#xff1b; 世界光&#xff1a; 世界光&#xff1a;在 Blender 中&#xff0c;世界光指的是用于设置场景整体照明的环境光。它可以通过调整颜色、强度、阴影等参数来影响场景的…

JAVA:错误: 找不到或无法加载主类 xx.xx.xx类

报错图片&#xff1a; 报错原因&#xff1a; 加载是没有定义项目的根目录或主要代码的位置。这个根目录是整个项目的起点&#xff0c;包含了所有的源代码文件和其他必要的资源文件 解决方法&#xff1a;定义根目录

449. 序列化和反序列化二叉搜索树

诸神缄默不语-个人CSDN博文目录 力扣刷题笔记 Python3版代码提示&#xff1a; # Definition for a binary tree node. # class TreeNode: # def __init__(self, x): # self.val x # self.left None # self.right None# Your Codec object will…

Promise 解决 Vue 中父子组件的加载问题!

前言 关于Promie我这里就不多解释了&#xff0c;不懂得可以看看官方文档。下面文章重点介绍项目中遇到的问题解决方法。 需求 组件b初始化某个用到的库&#xff0c;只有在初始化完成后才能调用其API&#xff0c;不然会报错。a页面负责调用。 // a.vue <template><d…

微服务架构基础--第4章Spring Boot核心功能2

第4章Spring Boot核心功能2 一.预习笔记 1.静态资源访问 1-1&#xff1a;resource下的static文件夹会被视为默认的根目录&#xff08;默认静态资源文件夹&#xff09; 1-2&#xff1a;index.html是SpringBoot的默认首页(默认配置了的) 1-3&#xff1a;修改网页logo&#xf…

文件上传漏洞全面渗透姿势

0x00 文件上传场景 (本文档只做技术交流) 文件上传的场景真的随处可见&#xff0c;不加防范小心&#xff0c;容易造成漏洞&#xff0c;造成信息泄露&#xff0c;甚至更为严重的灾难。 比如某博客网站评论编辑模块&#xff0c;右上角就有支持上传图片的功能&#xff0c;提交带…

飞行动力学 - 第17节-part2-机翼对航向静稳定性的影响 之 基础点摘要

飞行动力学 - 第17节-part2-机翼对航向静稳定性的影响 之 基础点摘要 1. 上反角贡献2. 后掠角贡献3. 机身贡献4. 参考资料 1. 上反角贡献 总体来说&#xff0c;略微降低稳定性。 2. 后掠角贡献 总体来说&#xff0c;略微增加稳定性。 3. 机身贡献 机身也是降低航向静稳定性&…

潜艇来袭(Qt官方案例-2维动画游戏)

一、游戏介绍 1 开始界面 启动程序&#xff0c;进入开始界面。 2 开始新游戏 点击菜单&#xff1a;File》New Game &#xff08;或者CtrlN&#xff09;进入新游戏。 开始新游戏之后&#xff0c;会有一个海底的潜艇&#xff0c;和水面舰艇对战。 计算机&#xff1a;自动控制…

尖端AR技术如何在美国革新外科手术实践?

AR智能眼镜已成为一种革新性的工具&#xff0c;在外科领域具有无穷的优势和无限的机遇。Vuzix与众多医疗创新企业建立了长期合作关系&#xff0c;如Pixee Medical、Medacta、Ohana One、Rods & Cones、Proximie等。这些公司一致认为Vuzix智能眼镜可有效提升手术实践&#x…

java+ssm+mysql水费管理系统

项目介绍&#xff1a; 使用javassmmysql开发的用户水费管理系统&#xff0c;系统包含超级管理员&#xff0c;系统管理员、用户角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理、用户管理、用水管理&#xff08;用水记录、缴费提醒&#xff09;、水费…