2024年java面试--mysql(4)

2023-11-16

系列文章目录

  1. 2024年java面试(一)–spring篇
  2. 2024年java面试(二)–spring篇
  3. 2024年java面试(三)–spring篇
  4. 2024年java面试(四)–spring篇
  5. 2024年java面试–集合篇
  6. 2024年java面试–redis(1)
  7. 2024年java面试–redis(2)


集群

1、主从复制过程

MySQl主从复制:

原理:将主服务器的binlog日志复制到从服务器上执行一遍,达到主从数据的一致状态。

过程:从库开启一个I/O线程,向主库请求Binlog日志。主节点开启一个binlog dump线程,检查自己的二进制日志,并发送给从节点;从库将接收到的数据保存到中继日志(Relay log)中,另外开启一个SQL线程,把Relay中的操作在自身机器上执行一遍

优点:

作为备用数据库,并且不影响业务
可做读写分离,一个写库,一个或多个读库,在不同的服务器上,充分发挥服务器和数据库的性能,但要保证数据的一致性

binlog记录格式: statement、row、mixed

基于语句statement的复制、基于行row的复制、基于语句和行(mix)的复制。其中基于row的复制方式更能保证主从库数据的一致性,但日志量较大,在设置时考虑磁盘的空间问题

2、数据一致性问题

“主从复制有延时”,这个延时期间读取从库,可能读到不一致的数据。

缓存记录写key法:

在cache里记录哪些记录发生过的写请求,来路由读主库还是读从库

异步复制:

在异步复制中,主库执行完操作后,写入binlog日志后,就返回客户端,这一动作就结束了,并不会验证从库有没有收到,完不完整,所以这样可能会造成数据的不一致。

半同步复制:

当主库每提交一个事务后,不会立即返回,而是等待其中一个从库接收到Binlog并成功写入Relay-log中才返回客户端,通过一份在主库的Binlog,另一份在其中一个从库的Relay-log,可以保证了数据的安全性和一致性。

全同步复制:

指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。

3、集群架构

Keepalived + VIP + MySQL 主从/双主

当写节点 Master db1 出现故障时,由 MMM Monitor 或 Keepalived 触发切换脚本,将 VIP 漂移到可用的 Master db2 上。当出现网络抖动或网络分区时,MMM Monitor 会误判,严重时来回切换写 VIP 导致集群双写,当数据复制延迟时,应用程序会出现数据错乱或数据冲突的故障。有效避免单点失效的架构就是采用共享存储,单点故障切换可以通过分布式哨兵系统监控。

在这里插入图片描述
架构选型: MMM 集群 -> MHA集群 -> MHA+Arksentinel。
在这里插入图片描述

4、故障转移和恢复

转移方式及恢复方法

1. 虚拟IPDNS服务 (Keepalived +VIP/DNSMMM 架构)

问题:在虚拟 IP 运维过程中,刷新ARP过程中有时会出现一个 VIP 绑定在多台服务器同时提供连接的问题。这也是为什么要避免使用 Keepalived+VIP 和 MMM 架构的原因之一,因为它处理不了这类问题而导致集群多点写入。

2. 提升备库为主库(MHAQMHA

尝试将原 Master 设置 read_only 为 on,避免集群多点写入。借助 binlog server 保留 Master 的 Binlog;当出现数据延迟时,再提升 Slave 为新 Master 之前需要进行数据补齐,否则会丢失数据。

分类

MySQL中的锁,按照锁的粒度分,分为以下三类:

  1. 全局锁:锁定数据库中的所有表。
  2. 表级锁:每次操作锁住整张表。
  3. 行级锁:每次操作锁住对应的行数据。

全局锁

全局锁就是对整个数据库实例加锁,加锁后整个实例就处于只读状态,后续的DML的写语句,DDL语句,已经更新操作的事务提交语句都将被阻塞。

其典型的使用场景是做全库的逻辑备份,对所有的表进行锁定,从而获取一致性视图,保证数据的完整性。

表级锁

表级锁,每次操作锁住整张表。锁定粒度大,发生锁冲突的概率最高,并发度最低。应用在MyISAM、InnoDB、BDB等存储引擎中。

对于表级锁,主要分为以下三类:

1.表锁
对于表锁,分为两类:

  1. 表共享读锁( read lock):读锁不会阻塞其他客户端的读,但是会阻塞写
  2. 表独占写锁(write lock ):写锁既会阻塞其他客户端的读,又会阻塞其他客户端的写

语法:

  1. 加锁:lock tables表名… read/write。
  2. 释放锁: unlock tables /客户端断开连接。

2.元数据锁( meta data lock,MDL)

MDL加锁过程是系统自动控制,无需显式使用,在访问一张表的时候会自动加上。MDL锁主要作用是维护表元数据的数据一致性,在表上有活动事务的时候,不可以对元数据进行写入操作。为了避免DML与DDL冲突,保证读写的正确性。

在MySQL5.5中引入了MDL,当对一张表进行增删改查的时候,加MDL读锁(共享);当对表结构进行变更操作的时候,加MDL写锁(排他)。

在这里插入图片描述

3.意向锁
1.意向共享锁(lS):与表锁共享锁(read)兼容,与表锁排它锁(write)互斥。

2.意向排他锁(IX)∶与表锁共享锁( read)及排它锁(write)都互斥。意向锁之间不会互斥。

行级锁

行级锁,每次操作锁住对应的行数据。锁定粒度最小,发生锁冲突的概率最低,并发度最高。应用在lnnoDB存储引擎中。
InnoDB的数据是基于索引组织的,行锁是通过对索引上的索引项加锁来实现的,而不是对记录加的锁。对于行级锁,主要分为以下三类:

**1.行锁(Record Lock)**∶锁定单个行记录的锁,防止其他事务对此行进行update和delete。在RC、RR隔离级别下都支持。

lnnoDB实现了以下两种类型的行锁:

1.共享锁(S)∶允许一个事务去读一行,阻止其他事务获得相同数据集的排它锁。

2.排他锁(X)∶允许获取排他锁的事务更新数据,阻止其他事务获得相同数据集的共享锁和排他锁。
默认情况下,InnoDB在REPEATABLE READ事务隔离级别运行,InnoDB使用next-key锁进行搜索和索引扫描,以防止幻读。

  1. 针对唯一索引进行检索时,对已存在的记录进行等值匹配时,将会自动优化为行锁。
  2. InnoDB的行锁是针对于索引加的锁,不通过g引条件检索数据,那么InnoDB将对表中的所有记录加锁,此时就会升级为表锁。

在这里插入图片描述
在这里插入图片描述

2.间隙锁(Gap Lock):锁定索引记录间隙((不含该记录),确保索引记录间隙不变,防止其他事务在这个间隙进行insert,产生幻读。在RR隔离级别下都支持。

**3.临键锁(Next-Key Lock)**∶行锁和间隙锁组合,同时锁住数据,并锁住数据前面的间隙Gap。在RR隔离级别下支持。
默认情况下,InnoDB在REPEATABLE READ事务隔离级别运行,InnoDB使用next-key锁进行搜索和索引扫描,以防止幻读。

  1. 索引上的等值查询(唯一索引),给不存在的记录加锁时,优化为间隙锁。
  2. 索引上的等值查询(普通索引),向右遍历时最后一个值不满足查询需求时,next-key lock退化为间隙锁。
  3. 索引上的范围查询(唯一索引)–会访问到不满足条件的第一个值为止。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

2024年java面试--mysql(4) 的相关文章

  • SWT:如何进行高质量图像调整大小

    我的应用程序需要调整 ImageData 的大小 不幸的是 我还没有通过 GC 开启抗锯齿和高插值 或 ImageData scaledTo 获得我想要的结果 生成的图像质量太低 无法接受 进行高质量 ImageData 调整大小的最佳方法
  • 单击链接时如何将另一个 JSP 页面注入到

    我在一个JSP页面中有两个不同的部分 其中一个包含链接菜单 单击时 div2 id content 会相应加载不同的页面 我正在做类似的事情 div ul class navbar li a href Login jsp Login a l
  • cygwin有java sdk吗?

    cygwin有java sdk吗 如果有一个使用 cygwin 文件系统和 X windows 进行显示的本机 cygwin 实现 那就太好了 不幸的是我不知道这样的版本 我认为移植 OpenJDK 也需要付出很大的努力 但我还没有尝试过
  • Spring批量写入器限制

    我正在工作 Spring Batch 项目 从数据库读取记录然后写入rabbitmq 然后发送到HTTP消息网关 网关有150TPS我需要将我的应用程序限制为 150TPS 有没有办法带弹簧批的油门或者还有其他更好的方法吗 你能行的 在 S
  • 打印数组时出错

    我得到这个代码 import java util import java io public class Oblig3A public static void main String args OrdAnalyse O new OrdAna
  • 从 java 类生成 xsd 的实用程序

    我想为以下类生成 xsd public class Node private String value private List
  • 外部化 Spring Security 配置?

    我有一个 Web 应用程序 可以使用 Spring Security 的几种不同配置 但是 这些差异配置都是在我的 applicationContext 配置文件中设置的 因此 为了在客户站点调整这些内容 必须在 WAR 文件内修改这些内容
  • MySQL max_allowed_pa​​cket 参数有什么问题?

    我需要增加 max allowed pa cket 参数 以适应一些理论上非常大的项目 如果我将此参数设置为 10M 那么与设置为 1M 或 4M 相比 我要支付什么价格 如果有的话 感谢您的任何意见 托马斯 我找到了这个解释 http w
  • 最终类中的静态函数是否隐式最终?

    我的问题基本上与this https stackoverflow com q 8766476 3882565一 但这是否也适用于static功能 我想了解 编译器是否处理所有static函数在一个final类为final 是否添加final
  • SQLiteAssetHelper 甚至在从资产文件夹复制数据库之前就导致立即崩溃

    https github com jgilfelt android sqlite asset helper https github com jgilfelt android sqlite asset helper 我要从SQLiteOpe
  • MongoDb Spring 在嵌套对象中查找

    我正在使用 Spring Data Mongodb 和这样的文档 id ObjectId 565c5ed433a140520cdedd7f attributes 565c5ed433a140520cdedd73 333563851 list
  • 使用 JavaFX 将可执行 Jar 限制为一个窗口

    我正在通过构建 JavaFX 应用程序E fx 剪辑 and Java场景生成器 基本功能是登录窗口 登录后 将打开新窗口 然后登录窗口消失 目前还处于原型阶段 用完eclipse后 我想要的功能都有了 启动时显示登录窗口 代码如下 Ove
  • 当对话框打开时如何处理屏幕方向变化?

    我有一个 Android 应用程序 它已经在处理方向的更改 即有一个android configChanges orientation 在清单和onConfigurationChange 活动中的处理程序切换到适当的布局并准备它 我有一个横
  • 什么会导致“IO错误java.net.SocketException:选择失败”?

    我的笔记本电脑上运行一个服务器程序 相同的路由器和相同的代码 它工作正常 客户端可以连接 然而 当我将工作区复制到我的电脑并运行它时 我得到了这样的废话 IO错误java net SocketException 选择失败 这是代码 publ
  • 如何保存/加载 BigInteger 数组

    我想保存 加载BigInteger数组传入 传出 SharedPreferences 如何做呢 例如对于以下数组 private BigInteger dataCreatedTimes new BigInteger 20 Using Gso
  • 我有什么理由应该嘲笑?

    我也是 Mockito 和 PowerMockito 的新手 我发现我无法使用纯 Mockito 测试静态方法 因此我需要使用 PowerMockito 对吗 我有一个非常简单的类 名为 Validate 使用这个非常简单的方法 publi
  • 如何将 .txt 文件的最后 5 行读入 java

    我有一个包含多个条目的文本文件 例如 hello there my name is JoeBloggs 我如何按降序阅读最后五个条目 即来自 JoeBloggs 那里 我目前有代码只能读取最后一行 public class TestLast
  • 使用mapstruct映射不同类型列表的元素

    我们正在映射一个对象 该对象具有一个对象列表 这些对象都实现了父接口 但可能具有不同的实现 但当我们映射列表时 似乎只有来自 ParentClass 的值被映射 而不是来自子类的值 但直接映射子进程就可以了 public class Par
  • 如何强制 Spark 执行代码?

    我如何强制 Spark 执行对 map 的调用 即使它认为由于其惰性求值而不需要执行它 我试过把cache 与地图调用 但这仍然没有解决问题 我的地图方法实际上将结果上传到 HDFS 所以 它并非无用 但 Spark 认为它是无用的 简短回
  • Android 中的自定义相机应用程序问题 - 旋转 270、拉伸捕获视图且未获取所有功能

    我从代码中得到了帮助https github com josnidhin Android Camera Example https github com josnidhin Android Camera Example 但面临一些问题 例如

随机推荐

  • JUC学习系列六(计数器 CountDownLatch)

    一个同步辅助类 在完成一组正在其他线程中执行的操作之前 它允许一个或多个线程一直等待 用给定的计数 初始化 CountDownLatch 由于调用了 countDown 方法 所以在当前计数到达零之前 await 方法会一直受阻塞 之后 会
  • 以一己之力搭建分布式ChatGPT

    原以为去年年底ChatGPT已经火过一阵子了 慢慢热度会降下来 出乎意料的是 其热度有增无减 我也是从去年年底一直关注并使用 包括ChatGPT网页版 GPT3 API以及ChatGPT内测API 还包括其他国内外一些人工智能算法的体验 为
  • python回声程序_python 包详解

    包 包是一种管理 Python 模块命名空间的形式 采用 点模块名称 比如一个模块的名称是 A B 那么他表示一个包 A中的子模块 B 就好像使用模块的时候 你不用担心不同模块之间的全局变量相互影响一样 采用点模块名称这种形式也不用担心不同
  • pyspark修炼手册(长期帖)

    2020 03 31 在进行pyspark开发时 需要先安装hadoop spark的环境 或者只安装spark环境即可 配置集群or单机环境都可以 在配置好环境后 不需要单独启动hadoop spark 直接运行pyspark程序即可 一
  • 初学STM32之定时器中断

    初学STM32之定时器中断 一 定时器概述 1 定时器的分类 STM32F10x系列总共最多有8个定时器分为高级定时器 通用定时器和基本定时器 三种定时器的主要区别如下图所示 本文章仅介绍通用定时器的一些知识 2 通用定时器功能概述 通用定
  • c语言实验5循环结构程序,C语言学习知识循环结构程序设计实验报告.doc

    C语言学习知识循环结构程序设计实验报告 doc 甘肃政法学院本科生实验报告 五 姓名赵明翔学院公安技术学院专业安全防范工程班级 2015级安全防范工程班实验课程名称程序设计实验日期2016年月日开课时间2015学年第二学期实验题目实验5 循
  • ios链式编程

    首先我们看一下使用Masonry对控件进行布局的代码格式 self bottomView1 mas makeConstraints MASConstraintMaker make make left mas equalTo 20 make
  • 不坑盒子 + 智能写作(Office、WPS插件)助你高效办公,早点下班回家。

    不坑盒子简介 很多朋友在工作过程中需要对Word文档进行编辑处理 如果想让Word排版更有效率可以试试小编带来的这款不坑盒子软件 这是一个非常好用的插件工具 专门应用在Word文档中 支持Office 2010以上的版本 用户可以借助工具快
  • Des加密原理与简单实现

    源码 https gitee com Cheney822 programmes blob master des py 摘要 实验利用Python语言实现了des加密和解密的功能 并封装成一个类方便后续调用 程序可以读取由数字 符号 字母和中
  • Quartus-建立新工程

    目录 1 安装并破解软件之后 启动Quartus 打开File gt New Project Wizard 进入下一个设置界面 2点击Next跳过介绍页 进入工程设置页 3 配置工程 4建立新的工程文件 5 更改代码编辑器 1 安装并破解软
  • UPF 学习

    常见基本概念及用到的元件 1 电压域 power domain 在逻辑上看 power domain是一组instance 的集合 集合中所有的instance 共用相同的supply set 从物理上看 一个power domain 对应
  • 区块链节点和区块区别_什么是区块链技术?从头开始第4讲_维护区块链的网络和节点...

    维护区块链 网络和节点 区块链由对等网络维护 网络是彼此互连的节点集合 节点是单独的计算机 它们接收输入并对它们执行功能并提供输出 区块链使用一种称为 点对点网络 的特殊网络 该网络在参与者之间划分其整个工作负载 所有参与者都享有同等特权
  • 电池电量与电压的关系

    目前 2012 6 人们主要使用两种监测方法 1 电流积分 current integration 为基础 前者依据一种稳健的思想 即如果对所有电池的充 放电流进行积分 就可以得出剩余电量的大小 当电池刚充好电并且已知是完全充电时 使用电流
  • flutter http成功后回调的写法

    方法如下 获取用户档案解锁状态和个人信息 getUnLockUserInfoStatus int userID Function callBack 回调的方法 表示这个参数可写可不写 if userID 0 return RxHttp
  • 数据库设计与优化

    数据库设计与优化是一个相对复杂的话题 需要涉及到多个方面 包括数据库的基本概念 关系型数据库的设计 数据库优化技巧等 下面将按照逻辑顺序一步一步详细介绍 排版清晰易懂 希望对你有所帮助 数据库基础概念 什么是数据库 数据库是一个有组织 有结
  • 100天精通Python(数据分析篇)——第73天:Pandas文本数据处理方法之查找、替换、拼接、正则、虚拟变量

    文章目录 每篇前言 一 Python字符串内置方法 1 文本查找 2 文本替换 3 文本拼接 4 正则提取 二 Pandas实现文本查找 1 str startswith 字符串 2 str endswith 字符串 3 str index
  • java.lang.IllegalStateException: Failed to load property source

    java lang IllegalStateException Failed to load property source from file H codes20210804 nacos demo provider target clas
  • Mybatis-plus中BaseMapper具体方法说明

    一 BaseMapper方法详解 1 Insert 插入一条记录 int insert T entity 2 Delete 根据 entity 条件 删除记录 int delete Param Constants WRAPPER Wrapp
  • NVIDIA-SMI系列命令总结

    1 NVIDIA SMI介绍 nvidia smi简称NVSMI 提供监控GPU使用情况和更改GPU状态的功能 是一个跨平台工具 它支持所有标准的NVIDIA驱动程序支持的Linux发行版以及从WindowsServer 2008 R2开始
  • 2024年java面试--mysql(4)

    系列文章目录 2024年java面试 一 spring篇 2024年java面试 二 spring篇 2024年java面试 三 spring篇 2024年java面试 四 spring篇 2024年java面试 集合篇 2024年java