【MySQL】InnoDB存储引擎

2023-05-16

【MySQL】InnoDB存储引擎

1 存储引擎的种类

常见的有三种:

存储引擎说明
InnoDB5.5 版本后 MySQL 的 默认数据库存储引擎,支持事务和行级锁 ,比 MyISAM 处理,速度稍慢
MyISAM高速引擎,拥有较高的插入,查询速度,但不支持事务
Memory内存存储引擎,拥有极高的插入,更新和查询效率 。只在内存上保存数据意味着数据可能会丢失。

归纳为一句话:除非需要用到某些 InnoDB 不具备的特性,并且没有其他办法可以替代,否则都应该选择 InnoDB 引擎。

也就是说,大部分情况下都选择 InnoDB。

InnoDB 和 MyISA 存储引擎区别:

在这里插入图片描述

2 InnoDB架构

主要分为两部分:

  • 内存结构
    • Buffer Pool 缓冲池
    • Change Buffer 修改缓冲
    • Adaptive Hash Index 自适应哈希索引
    • Log Buffer 日志缓冲
  • 磁盘结构
    • 系统表空间(重要)
    • 独立表空间(重要)
    • 通用表空间
    • 临时表空间

在这里插入图片描述

2.1 InnoDB内存结构

缓冲池 Buffer Pool

  • 缓冲池 Buffer Pool 用于加速数据的访问和修改。
  • 默认大小 128 M
  • 缓存数据到内存,最大限度地减少磁盘 IO,加速 热点数据 的读和写
  • 使用 **LRU 算法(最近最久未使用)**淘汰非热点数据页
    • LRU:根据页数据的历史访问来淘汰数据,如果数据最近被访问过,那么将来访问的几率也更高,优先淘汰最近没有被访问到的数据

在这里插入图片描述

  • Buffer Pool 中的数据以 为存储单位,数据结构是 单链表
  • 对于 Buffer Pool 中数据的「查询」,InnoDB 直接读取返回;
  • 对于 Buffer Pool 中数据的「修改」,InnoDB 直接在 Buffer Pool 中修改,并将修改写入 redo Log 中,当数据页被 LRU 算法淘汰时写入磁盘,若持久化前系统崩溃,则在重启后使用 redo Log 进行恢复。

补充:【缓存置换策略】

  • FIFO:先进先出
    • 先进入缓存的优先被淘汰
    • 简单的策略,但命中率低
  • LRU:最近最久未使用
    • 每次访问数据都放在队头,从队尾淘汰数据
  • LFU:最近最少使用
    • 利用额外的空间记录每个数据的使用频率,选出最低频率的数据淘汰
  • MRU:最近最常使用
    • 优先移除最近最常使用的条目
    • 擅长处理一个条目越久,越容易被访问的情况

修改缓冲 Change Buffer

Change Buffer(在 MySQL 5.6 之前叫 insert buffer,简称 ibuf )是 InnoDB 5.5 引入的一种优化策略。Change Buffer 用于加速 非热点数据 中二级索引的写入操作。 由于二级索引数据的不连续性,导致修改二级索引时需要进行频繁的磁盘 IO 消耗大量性能,Change Buffer 缓冲对二级索引的修改操作,同时将写操作录入 redo log 中,在缓冲到一定量或系统较空闲时进行 merge 操作将修改写入磁盘中。Change Buffer 在系统表空间中有相应的持久化区域。

二级索引:非主键的索引

  • 用于加速 非热点数据二级索引的写入 操作
  • 修改缓冲对二级索引的修改操作会录入 redo log
  • 在缓冲到一定量或系统比较空闲的时候,进行 merge 操作(写入磁盘)
  • 修改缓冲在系统表空间中有相应的持久化区域
  • 其物理结构为一棵名为 ibuf 的 B+ 树

在这里插入图片描述

自适应哈希索引 Adaptive Hash Index

自适应哈希索引(AHI),用于实现对 热数据页 的一次查询,是建立在索引之上的索引

使用聚簇索引进行数据页定位的时候需要根据索引树的高度从根节点走到叶子节点,通常需要 3 到 4 次查询才能定位到数据。InnoDB 根据对索引使用情况的分析和索引字段的分析,通过 自调优 Self-tuning 的方式为索引页建立或者删除哈希索引。

  • 作用:对频繁查询的数据页和索引页进一步提速
  • AHI 大小为 Buffer Pool 的 1/64
  • 如果 二级索引 命中 AHI:
    • 从 AHI 中获取索引页记录指针,再根据主键沿着聚簇索引查找数据
  • 如果 聚簇索引 命中 AHI:
    • 直接返回目标数据页的记录指针,根据记录指针可以直接定位数据页

「聚簇索引」是 物理有序 的;「非聚簇索引」是 逻辑有序,物理无序

在 mysql 中 数据存储顺序就是聚簇索引的顺序,所以一个表只有一个聚簇索引,其他索引都是非聚簇的。

日志缓冲 Log Buffer

InnoDB 使用 Log Buffer 来缓冲日志文件的写入操作。

内存写入 加上 日志文件顺序 写的特点,使得 InnoDB 日志写入性能极高。

对于任何修改操作,都将录入诸如 redo logundo log 这样的日志文件中,因此日志文件的写入操作非常频繁,却又十分零散。这些文件都存储在磁盘中,因此日志记录将引发大量的磁盘 IO。

Log Buffer 将分散的写入操作放在内存中,通过 定期批量写入磁盘 的方式提高日志写入效率和减少磁盘 IO。

在这里插入图片描述

注意:这种将分散操作 改为 批量操作的优化方式将增加数据丢失的风险!

2.2 InnoDB磁盘结构

在磁盘中,InnoDB 存储引擎将 数据、索引、表结构和其他缓存信息等 存放的空间称为 表空间(Tablespace),它是 物理存储中的最高层,由 段Segment、区Extent、页Page、行Row 组成。

在这里插入图片描述

目前的表空间类别包括:

  • 系统表空间(System Tablespace),关闭独立表空间,所有表数据和索引都会存入系统表空间
  • 独立表空间(File-per-table Tablespace),开启独立表空间,每张表的数据都会存储到一个独立表空间
  • 通用表空间(General Tablespace)
  • 回滚表空间(Undo Tablespace)
  • 临时表空间(The Temporary Tablespace)

在这里插入图片描述

系统表空间

系统表空间是 InnoDB 数据字典、双写缓冲、修改缓冲回滚日志 的存储位置。

如果关闭独立表空间,它也将存储所有的表数据和索引。

它默认下是一个初始大小 12MB,名为 ibdata1 的文件,系统表空间所对应的文件由 innodb_data_file_path 定义。

  • 数据字典:数据字典是由各种 表对象 的元数据信息(表结构、索引、列信息等)组成的 内部表
  • 双写缓冲(Doublewrite Buffer):双写缓冲用于 保证写入磁盘时页数据的完整性 ,防止发生部分写失效问题
  • 修改缓冲(Change Buffer): 内存中 Change Buffer 对应的持久化区域
  • 回滚日志(Undo Log):实现事务进行回滚 操作时对数据的恢复。是实现 多版本并发控制(MVCC) 重要组成

在这里插入图片描述

独立表空间

在 MySQL 5.7 后,默认开启独立表空间。

独立表空间用于存放 每个表的数据、索引和插入缓冲 Bitmap 页。

其他类型的信息,如:回滚信息、插入缓冲索引页、系统事务信息、二次写缓冲等 仍存放于系统表空间 内。因此即使用了独立表空间,系统表空间也会不断增长。

开启独立表空间(File-per-table TableSpace)( innodb_file_per_table=ON )之后:

  • InnoDB 会为每个数据库单独创建子文件夹
  • 数据库文件夹内为每个数据表单独建立一个表空间文件 table.ibd
  • 同时创建一个 table.frm 文件用于保存表结构信息

每个独立表空间的初始大小是 96KB

在这里插入图片描述

在每个文件夹内:

在这里插入图片描述

因为我是 mysql8,因此没有 .frm 文件。

通用表空间

通用表空间(General Tablespace)是一个由 CREATE TABLESPACE 命令创建的共享表空间,创建时必须指定该表空间名称和 ibd 文件位置,ibd 文件可以放置于任何 MySQL 有权限的地方。该表空间内可以容纳多张数据表,同时在创建时可以指定该表空间所使用的默认引擎。

通用表空间存在的目的是为了在系统表空间与独立表空间之间作出平衡。系统表空间与独立表空间中的表可以向通用表空间移动,反之亦可,但系统表空间中的表无法直接与独立表空间中的表相互转化。(桥梁作用)

在这里插入图片描述

回滚表空间

Undo TableSpace 用于存放一个或多个 undo log 文件。

默认 undo log 存储在系统表空间中,MySql 5.6 以后支持自定义 Undo log 表空间并存储所有 undo log。一旦用户定义了 Undo Tablespace,则系统表空间中的 Undo log 区域将失效。对于 Undo Tablespace 的启用必须在 MySQL 初始化前设置,Undo Tablespace 默认大小为 10MB。Undo Tablespace 中的 Undo log 表可以进行 truncate 操作。

在这里插入图片描述

临时表空间

MySQL 5.7 之前临时表存储在系统表空间中,这样会导致 ibdata 在使用临时表的场景下疯狂增长。5.7 版本之后 InnoDB 引擎从系统表空间中抽离出临时表空间(Temporary Tablespace),用于独立保存临时表数据及其回滚信息。该表空间文件路径由 innodb_temp_data_file_path 指定,但必须继承 innodb_data_home_dir 。

在这里插入图片描述

2.3 磁盘文件的存储结构

在这里插入图片描述

表空间由 段、区、页、行 组成。

段(Segment)

表空间由各个段(Segment)组成,创建的段类型分为「数据段、索引段、回滚段」等。由于 InnoDB 采用聚簇索引与 B+ 树的结构存储数据,所以事实上数据页和二级索引页仅仅只是 B+ 树的叶子节点,因此数据段称为 Leaf node segment,索引段其实指的是 B+ 树的非叶子节点,称为 Non-Leaf node segment。一个段会包含多个区,至少会有一个区,段扩展的最小单位是区。

  • 数据段 称为 Leaf node segment
  • 索引段 称为 Non-Leaf node segment

区(Extent)

区(Extend)是由连续的页组成的空间,大小固定为 1MB ,由于默认页大小为 16K ,因此一个区默认存储 64 个连续的页。

如果页大小调整为 4K,则 256 个连续页组成一个区。为了保证页的连续性,InnoDB 存储引擎会一次从磁盘申请 4 ~ 5 个区

  • 区是由连续的页组成的空间,大小固定为 1MB
  • 默认页大小为 16K,所以默认一个区有 64 个页
  • 为了保证区的连续性,一般会从磁盘申请 4-5 个区

页(Page)

页(Page)是 InnoDB 的基本存储单位,每个页大小默认为 16K,从 InnoDB1.2.x 版本开始,可通过设置 innodb_page_size 修改为 4K、8K、16K 。InnoDB 首次加载后便无法更改。

  • 页是 InnoDB 的基本存储单位,页默认大小是 16K(可 innodb_page_size 进行修改),InnoDB 首次加载后便无法更改
  • 操作系统「读写磁盘最小单位」是 页,4K,正正好好是 InnoDB 默认的 1/4

Linux 管理磁盘的最小单位也是页,是操作系统读写磁盘的最小单位。

Linux 中页大小一般是 4K,正好是磁盘扇区的 8 倍,也是 InnoDB 页的 1/4。所以 InnoDB 从磁盘中读取一个数据页时,操作系统会分 4 次从磁盘文件中读取数据到内存。写入也是一样的,需要分 4 次从内存写入到磁盘中。

在这里插入图片描述

行(Row)

InnoDB 的数据是以行为单位存储的,1个页中包含多个行。在 MySQL5.7 中,InnoDB 提供了 4 种行格式:Compact、Redundant、Dynamic 和 Compressed行格式,Dynamic 为 MySQL5.7 默认的行格式。

2.4 脏页落盘

什么是脏页?

对数据的 修改操作 ,首先修改 内存结构 中的缓冲区的页,缓冲区的页与磁盘中页的数据不一致,因此称缓冲区中的页为 脏页

脏页如何进入到磁盘?

脏页从缓冲区刷新到磁盘,并不是每次更新后就触发, 而是通过 CheckPoint 机制 刷新磁盘!

InnoDB 数据落盘流程

在数据库中进行 「读取操作」 ,将磁盘中读到的页放在缓冲区中,下次再读取相同的页时,首先判断该页是否在缓冲区中。若在缓冲区中,称该页在缓冲区中命中,直接读取该页;否则读取磁盘上的页。

在数据库中进行 「修改操作」,首先修改在缓冲区中的页,然后再以一定频率刷新到磁盘上。页从缓冲区刷新到磁盘的操作并不是在每次页发生更新时都出发,而是通过一种称为 CheckPoint 机制刷新回磁盘。

在这里插入图片描述

内存数据落盘要考虑的核心问题:高性能地写入数据,同时保证数据的绝对安全性!

  • 如何保证写入性能?

    把写入操作放在内存中,通过定期批量写入磁盘的方式提高写入效率,减少磁盘IO

  • 如何持久化?

    • 通过 CheckPoint 机制 进行脏页落盘
    • 日志先行,所有操作之前,先写 Redo Log 日志
  • 数据安全性怎么保证?

    • 记录操作日志:Force Log at Commit 机制Write Ahead Log(WAL)机制
    • CheckPoint 机制
    • Double Write 机制

为什么不是每次更新都直接写入磁盘?

如果每次页的变化都写入磁盘,一个页落盘必然伴随着 4 次 IO,性能开销极大,而且伴随着写入操作的次数增加,性能开销指数级增长。

当然,数据也不能在内存中保存太长时间,时间越久安全性风险越高!

重新回顾一下,Mysql 中页的大小是 16K,而 Linux 中页大小为 4K,所以至少 4 次 IO。

InnoDB 采用 Write Ahead Log 策略Force Log at Commit 机制 实现事务的持久性:

  • Write Ahead Log 策略 :日志先行,数据变更写入磁盘之前,必须将内存中的日志缓存写入磁盘
  • Force Log at Commit 机制 :当事务提交时,所有事务产生的日志都必须刷到磁盘

在这里插入图片描述

如何保证日志安全地进入磁盘?

为了确保日志写入磁盘,将 redo log 日志写入 Log Buffer 后调用 fsync 函数,将缓存日志文件从 OS Cache 中写入磁盘。Mysql 提供了三种策略:

  • 定时策略(0):每秒写入,与事务无关

    • 最多丢失 1s 的事务操作

    • 写入效率最高,安全性最低

  • 事务提交时,写入磁盘(默认策略,1)

    • 不会丢失任何数据
    • 写入效率最低,安全性最高
  • 事务提交时,写入 OS Cache(2)

    • 数据安全性依赖于操作系统,最多丢失 1s 的事务操作
    • 写入效率居中,安全性居中

在这里插入图片描述

CheckPoint 机制

CheckPoint 机制是将缓冲中的脏页数据刷到磁盘上的机制,决定了脏页落盘的时机、条件和脏页的选择等。

CheckPoint 的类型不只一种:

  • sharp checkpoint:关闭数据库时,将脏页全部刷新到磁盘中
  • fuzzy checkpoint:默认方式,在运行时选择不同时机进行脏页落盘,只刷新部分脏页
    • Master Thread CheckPoint:固定频率刷新部分脏页数据到磁盘,异步操作,不会阻塞用户线程
    • FLUSH_LRU_LIST CheckPoint:缓冲池淘汰非热点 Page,如果该 Page 是脏页,则会执行 CheckPoint
    • Dirty Page Too Much CheckPoint:脏页占比太多,强行刷盘,阈值 75%

CheckPoint 的作用:

  • 脏页落盘:避免数据更改直接操作磁盘
  • 缩短数据库的恢复时间:数据库宕机时,不需要重做所有的 redo 日志,大大缩短了恢复时间
  • 缓冲池不够用时,将脏页刷新到磁盘:Buffer Pool 不够用时,溢出页落盘,LRU 淘汰非热点数据
  • redo 日志不可用时,刷新脏页:日志文件可以循环使用,不会无限增长

Double Write 机制

脏页大小 16K,如果只写了 8K 系统就发生故障了,会怎么样?

这个问题被称为 部分写(写失效)问题 ,是 redo log 无法解决的!为了解决这个问题,所以才需要双写(Double Write 机制)。

在这里插入图片描述

Double Write 其实就是写了两次,在修改记录日志 redo log 之前,先做个副本留个“备胎”。

redo log 无法解决写失效问题,因为它记录的是对页的修改记录,而不是页的数据本身。

在这里插入图片描述

Double Write Buffer 主要分为两部分:

  • 内存中,大小为 2MB
  • 磁盘的系统表空间中,大小为 2MB ,2 个区,128 个页

Double Write 崩溃恢复过程

  • 首先找到系统表空间中的 Double Write 区域对应的页副本数据
  • 然后将其复制到独立表空间
  • 最后应用 redo log 日志

在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【MySQL】InnoDB存储引擎 的相关文章

  • ubuntu16.04下px4环境搭建与固件编译

    px4官网提供了一个批处理方式搭建px4开发环境 xff0c 十分好用 xff0c 按照官网步骤 1 sudo usermod span class hljs a span G dialout span class hljs variabl
  • Top-down与Bottom-up

    简析 顾名思义 xff0c top down是由上至下 xff0c 而bottom up由下至上的意思 其实 xff0c 就我对本行业的理解 xff0c top 61 目的 objective xff0c bottom 61 方法细节 ac
  • MATLAB GPU加速

    以前使用matlab 的时候 xff0c 很多人都用过里面的并行工具箱 xff0c 用的最多的应该就是parfor 实际上 xff0c matlab里面已经有不少工具箱里面都有了支持GPU加速的函数 使用matlab 43 GPU加速的前提
  • 论如何最低成本进入 智能家居、人工智能、安卓主板 的领域

    原创 xff1a http blog csdn net kylin fire zeng xff0c 欢迎转载分享 xff0c 共同进步 xff0c 但请注明出处啊 xff0c 尊重他人成果
  • 为什么说枚举单例模式是最安全的?

    单例模式有很多种 xff0c 如 xff1a 饿汉式 线程安全 xff0c 但是浪费资源 xff1b 懒汉式 懒汉式又分为 xff0c 同步锁单例模式 性能较差 xff1b 双重判断同步锁单例模式 静态内部类单例模式 以上单例模式大多数都是
  • Qt - 信号与槽的连接方式

    信号与槽的连接方式主要有以下5种方式 xff1a 先看代码 xff1a ifndef MYOBJECT H define MYOBJECT H include lt QObject gt class MyObject public QObj
  • vslam流程框架介绍

    平常扫地机产品上经常听说使用了vslam技术 xff0c 那么这个vslam到底是什么呢 xff0c 我们下面一起来看看 vslam是什么 xff1f VSLAM 即 Visual Simultaneous Localization and
  • linux出现oom分析流程

    背景 linux内核有个机制叫OOM killer Out Of Memory killer xff0c 当系统需要申请内存却申请不到时 xff0c OOM killer会检查当前进程中占用内存最大者 xff0c 将其杀掉 xff0c 腾出
  • 浅入浅出linux中断子系统

    浅入浅出linux中断子系统 xff0c 如需深入 xff0c 直接跳转重要参考章节 什么是中断 xff1f 当CPU被某些信号触发 xff0c CPU暂停当前工作 xff0c 转而处理信号的事件 xff0c 简单的称它为中断 xff0c
  • ROS2交叉编译操作

    ROS2移植过程 在移植ROS2之前 先确认需要移植的版本以及其对应的依赖 这些信息可以在 ROS 2 Releases and Target Platforms 中有介绍 可依据自身需要使用的平台 参考该链接进行选择 下面以ROS2 Hu
  • gstreamer学习笔记---pad定义、连接、流动

    pad相当于element的接口 xff0c 各个element就是通过pad连接进行传输数据 xff0c 同时pad会通过caps限制特定的数据类型通过 xff0c 只有当两个pad的caps数据类型一致时才可以建立连接 那么pad在el
  • gstreamer学习笔记---gst-omx

    一 openMAX理解1 gst omx是基于openMAX开发的插件 xff0c 所以在介绍gst omx之前 xff0c 我们先了解一下openMAX openMAX xff1a open media acceleration xff0
  • csi mipi信号解析

    1 传输模式 LP xff08 Low Power xff09 模式 xff1a 用于传输控制信号 xff0c 最高速率 10 MHz HS xff08 High Speed xff09 模式 xff1a 用于高速传输数据 xff0c 速率
  • 程序调试方法

    记录初衷 xff1a 遇到问题 xff0c 按照一套方法 xff0c 把问题化解 xff0c 逐渐的内化为心法 xff0c 形成经验 xff0c 这就是成长的过程 就好比吃的猪肉 xff0c 经过消化 分解 吸收后变成了自己肉 程序分为三种
  • 博客八:基于xr871实现wifi音响产品

    原创 xff1a http blog csdn net kylin fire zeng xff0c 欢迎转载分享 xff0c 共同进步 xff0c 但请注明出处啊 xff0c 尊重他人成果
  • 用 Docker 部署一个 Python 应用

    Flask项目 这里为了演示的方便 xff0c 我们就写一个简单的Flask项目 xff0c 代码如下 from flask import Flask app 61 Flask name 64 app route 39 39 def ind
  • Realsence D455标定并运行Vins-Fusion

    文章目录 一 双目相机标定1 标定板准备1 1 打印标定板1 2 标定板信息原始pdf的格子参数是 xff1a 调整后的格子参数是 xff1a 2 左右目相机数据准备2 1 修改rs camera launch内容2 2 关闭结构光2 3
  • 【Linux命令】文件和目录权限

    Linux命令 文件和目录权限 权限查看 众所周知 xff0c 可以使用 ls l 来查看文件和目录的详细信息 xff0c 那么输出的东西是什么呢 xff1f 我们先来看 文件类型 xff1a xff1a 普通文件 xff1b d xff1
  • 【设计模式】单例模式

    设计模式 单例模式 1 为什么要用单例 xff1f 单例设计模式 xff08 Singleton Design Pattern xff09 xff1a 一个类只允许创建一个对象 xff08 或实例 xff09 1 1 处理资源访问冲突 例如
  • 【JAVA】基础语法

    JAVA 基础语法 JAVA面向对象三大特征 封装 继承 多态 1 类型转换 1 1 自动类型转换 自动类型转换 类型范围小的变量 可以直接赋值给类型范围大的变量 1 2 表达式的自动类型转换 在表达式中 小范围类型的变量会自动转换成当前较

随机推荐

  • 【Java技巧】如何在HashMap中插入重复的key?

    Java技巧 如何在HashMap中插入重复的key xff1f 问题引出 我们都知道 xff0c Map 的 key 需要保证唯一性 插入重复的 key 会被最后插入的 key 所覆盖 xff0c 如 xff1a span class t
  • ArrayList源码分析

    ArrayList源码分析 注意 本笔记分析对象为 Java8 版本 随版本不同 源码会发生变化 1 ArrayList类图与简介 ArrayList是一个 非线程安全 基于数组实现的一个动态数组 可以看到 它的顶层接口是 Collecti
  • Vector源码分析

    Vector源码分析 1 Vector基本介绍与类图 Vector 类实现了一个动态数组 和 ArrayList 很相似 但是两者是不同的 Vector 是同步访问的 Vector 包含了许多传统的方法 这些方法不属于集合框架 Vector
  • LinkedList源码分析

    LinkedList源码分析 注意 本笔记分析对象为 Java8 版本 随版本不同 源码会发生变化 基本介绍与类图 LinkedList 同时实现了 List 接口和 Deque 对口 也就是收它既可以看作一个顺序容器 又可以看作一个队列
  • 【网管日记】Linux防火墙操作

    网管日记 Linux防火墙操作 记录一下常用的Linux防火墙操作 xff1a 查看防火墙状态 systemctl status firewalld 或 firewall cmd state暂时关闭防火墙 systemctl stop fi
  • (毕业设计资料)基于51单片机的智能窗控制系统设计

    实现参考功能 1 可实时显示年月日 时分秒 光照强度和控制模式 xff1b 2 可通过手动控制窗帘的开启和关闭 xff1b 3 可通过设置开启和关闭时间来控制窗帘 xff1b 4 可通过检测光照强度的亮暗来控制窗帘 xff1b 5 使用步进
  • 网络操作系统 第十二章 FTP服务器的安装与配置

    习题 1 简述FTP的连接模式 FTP的连接模式有PORT和PASV两种 xff0c 其中PORT模式是主动模式 xff0c PASV是被动模式 xff0c 这里所说的主动和被动都是相对于服务器而言的 如果是主动模式 xff0c 数据端口为
  • 【网管日记】MySQL主从复制

    MySQL主从复制 基本介绍 MySQL 主从复制是一个异步的复制过程 xff0c 底层是基于 Mysql 数据库自带的 二进制日志 功能 一台或多台 MySQL 数据库 xff08 slave xff0c 即 从库 xff09 从另一台
  • 【网管日记】Nginx基本介绍、安装与使用

    Nginx基本使用 基本介绍 Nginx是一款轻量级的Web服务器 反向代理服务器及电子邮件 xff08 IMAP POP3 xff09 代理服务器 其特点是 占用内存少 xff0c 并发能力强 xff0c 事实上nginx的并发能力在同类
  • 【网管日记】Nginx报错踩坑记录

    网管日记 Nginx报错踩坑记录 1 防火墙没关闭 自启 error 21113 0 21 connect failed 113 No route to host while connecting to upstream 解决方法 xff1
  • 【数据结构与算法】Manacher算法

    Manacher算法 https github com SongJianHIT DataStructurs Algorithm tree main src algorithms manacher 基本介绍 Manacher 算法常用于 求一
  • 【数据结构与算法】DP路径问题

    问题 xff1a 最小路径和 给定一个包含非负整数的 m x n 网格 grid xff0c 请找出一条从左上角到右下角的路径 xff0c 使得路径上的数字总和为最小 说明 xff1a 每次只能向下或者向右移动一步 示例 1 xff1a 输
  • 【Java开发】Dependency ‘XXX‘ not found

    Java开发 Dependency XXX not found 在配置 pom 文件时 xff0c 遇到 Dependency 39 com google guava guava 30 0 jre 39 not found 方法一 xff1
  • 【Mysql】日期函数总结

    Mysql 日期函数总结 1 获取日期时间函数 1 1 获取当前日期时间 span class token keyword SELECT span span class token function NOW span span class
  • 【Java开发笔记】线程池

    Java开发笔记 线程池 线程池 ThreadPoolExecutor 的七大核心参数 xff1a 核心线程数 corePoolSize最大线程数 maxinumPoolSize超过核心线程数的闲余线程存活时间 keepAliveTime存
  • 【Java开发笔记】分库分表

    Java开发笔记 分库分表 1 分库分表基本概述 为什么要分库分表 xff1f 性能角度 分库分表就是为了解决由于数据量多大而导致数据库性能下降的问题 xff1a 原来独立的数据库拆分成若干数据库组成将原来的大表 xff08 存储近千万数据
  • 【网关日记】配置阿里云容器镜像加速

    运行 xff1a sudo mkdir p etc docker sudo tee etc docker daemon json lt lt 39 EOF 39 34 registry mirrors 34 34 https qbd2mty
  • 【毕业设计】基于51单片机的智能窗帘设计(原理图+原理图+仿真+论文)

    按键1 xff1a 加 xff08 手动开启窗帘 按键2 xff1a 减 xff08 手动关闭窗帘 xff09 按键3 xff1a 进入定时模式开启时间和光控阈值数值大小的开启 按键4 xff1a 进入当前时间的设置 xff08 年 月 日
  • 【MySQL】基本架构与执行过程

    MySQL 基本架构与执行过程 1 日志 MySQL 是通过文件系统对数据索引后进行存储的 xff0c MySQL 从物理结构上可以分为 日志文件 和 数据及索引文件 MySQL 在 Linux 中的数据索引文件和日志文件通常放在 var
  • 【MySQL】InnoDB存储引擎

    MySQL InnoDB存储引擎 1 存储引擎的种类 常见的有三种 xff1a 存储引擎说明InnoDB5 5 版本后 MySQL 的 默认数据库存储引擎 xff0c 支持事务和行级锁 xff0c 比 MyISAM 处理 xff0c 速度稍