首页 > 数据库 >一、MySQL体系结构和存储引擎

一、MySQL体系结构和存储引擎

时间:2023-08-26 12:22:56浏览次数:44  
标签:存储 实例 数据库 引擎 InnoDB MySQL 体系结构

一、MySQL体系结构和存储引擎

1.1 定义数据库和实例

  • 数据库:物理操作系统文件或其他形式文件类型的集合。在MySQL数据库中,数据库文件可以是 frm、MYD、MYI、ibd结尾的文件。
  • 实例:MySQL数据库由后台线程以及一个共享内存区组成。共享内存可以被运行得后台线程所共享。需要牢记的是,数据库实例才是真正用于操作数据库文件的。

这两个词有时可以互换使用,不过两者的概念完全不同。在MySQL数据库中,实例与数据库的关系通常是一一对应的,即一个实例对应一个数据库,一个数据库对应一个实例。但是,在集群情况下可能存在一个数据库被多个数据库实例使用的情况。

当启动实例时,MySQL数据库会去读取配置文件,根据配置文件的参数来启动数据库实例。

linux /etc/my.cnf

win .cnf / .ini

配置文件中有一个参数 datadir,该参数指定了数据库所在的路径。linux 默认 datadir 为 /usr/local/mysql/data

1.2 MySQL体系结构

从概念上讲,数据库是文件的集合,是依照某种数据模型组织起来并存放于二级存储器中的数据集合;数据库实例是程序,是位于用户与操作系统之间的一层数据管理软件,用户对数据库数据的任何操作,包括数据库定义、数据查询、数据维护、数据库运行控制等都是在数据库实例下进行的,应用程序只有通过数据库实例才能和数据库打交道。

存储引擎是基于表的,而不是数据库。

1)InnoDB存储引擎

支持事务,行锁,支持外键

通过使用多版本并发控制(MVCC)来获得高并发性,并且实现了SQL标准的4种隔离级别,默认是 repeatable 级别。同时,使用一种被称为 next-key locking 的策略来避免幻读。除此之外,InnoDB存储引擎还提供了插入缓冲(insert buffer)、二次读写(double write)、自适应哈希索引(adaptive hash index)、预读(read ahead)等高性能和高可用的功能。

对于表中数据的存储,InnoDB存储引擎使用了聚集(clustered)的方式,因此每张表的存储都是按主键的顺序进行存放。如果没有显式地在表定义时指定主键,InnoDB存储引擎会为每一行生成一个6字节的 ROWID,并以此作为主键。

next-key locking Innodb锁机制:Next-Key Lock 浅谈

插入缓冲(insert buffer) Mysql关键特性-插入缓冲 (Insert Buffer)

二次读写(double write)MySQL InnoDB特性:两次写(Double Write)

自适应哈希索引(adaptive hash index)MySQL 自适应哈希索引

预读(read ahead)MySQL的预读机制

2)MyISAM 存储引擎

不支持事务、表锁、支持全文索引

由 MYD 、MYI组成,MYD 用来存放数据文件,MYI 用来存放索引文件

1.5 连接MySQL

一个连接进程和MySQL数据库实例进行通信。从程序设计的角度来说,本质上是进程通信。如果对进程通信比较了解,可以知道常用的进程通信方式有管道、命名管道、命名字、TCP / IP 套接字、UNIX 域套接字。

在通过 TCP / IP 连接到 MySQL 实例时,MySQL数据库会先检查一张权限视图,用来判断发起请求的客户端IP是否允许连接到 MySQL实例。

标签:存储,实例,数据库,引擎,InnoDB,MySQL,体系结构
From: https://www.cnblogs.com/lhxBlogs/p/17658637.html

相关文章

  • 二、InnoDB存储引擎
    2.3InnoDB体系架构1)后台线程MasterThread:核心线程,主要负责将缓冲池的数据异步刷新到磁盘,保证数据的一致性,包括脏页的刷新、合并插入缓冲、UNDO页的回收等。IOThread:处理IO请求PurgeThread:事务被提交后,其所使用的undolog可能不再需要,因此需要PurgeThread来回收已经使......
  • MySQL优化
    索引创建方式#1、随表建立索引createtablecustomer( idint(10)auto_increment, customer_novarchar(20), customer_namevarchar(20), #创建主键索引 primarykey(id), #创建唯一索引 uniqueidx_customer_no(customer_no), #创建单值索引 keyidx_customer_name(......
  • 【MySQL 8.0】在组复制(MGR)的基础上创建InnoDB Cluster
    [root@node04~]#wgethttps://dev.mysql.com/get/Downloads/MySQL-Shell/mysql-shell-8.0.32-1.el7.x86_64.rpm[root@node04~]#yumlocalinstallmysql-shell-8.0.32-1.el7.x86_64.rpm-y[root@node04~]#mysqlshMySQLJS>\connectroot@node01:3306MySQL......
  • 【MySQL 8.0】密码复杂度验证组件与连接控制插件
    (root@node01)>installcomponent'file://component_validate_password';QueryOK,0rowsaffected(0.08sec)(root@node01)>select*frommysql.component;+--------------+--------------------+------------------------------------+|compo......
  • openGauss学习笔记-51 openGauss 高级特性-列存储
    openGauss学习笔记-51openGauss高级特性-列存储openGauss支持行列混合存储。行存储是指将表按行存储到硬盘分区上,列存储是指将表按列存储到硬盘分区上。行、列存储模型各有优劣,建议根据实际情况选择。通常openGauss用于OLTP(联机事务处理)场景的数据库,默认使用行存储,仅对执行复杂......
  • mysql字符串替换 replace方法替换字段中的值
    需求:字符串A是一个JSON字符串,其中的属性值可能为空吗,例如字段”result“{"处理结果":{"字段A":{"结果":""},......,{"字段X":{"结果”:""}}}需求:如果其中的结果为空则将 {"结果":""}替换为""selectreplace(result,'{"......
  • 通过Maven将文件上传到阿里云对象存储OSS
    首先在阿里云开通对象存储OSS功能(免费的),然后在Bucket列表中创建一个Bucket,地域建议选择华东1(杭州),因为这样后面就不用修改Endpoint,或者你直接记住Endpoint也行,读写仅限为公共读,其他的选项就默认的就行了。然后在右上角的头像初点击AccessKey管理,选择继续使用AccessKey,点击创建Ac......
  • mysql 深入学习一 数据结构导图
    索引的本质 B-Tree结构 B+Tree结构 Hash结构  MyISAM存储引擎索引实现 innodb存储引擎实现 innodb引擎生成两个文件,将索引文件和数据文件都放在的.ibd文件下(这就是聚集索引)myisam引擎生成三个文件,将索引和数据分开保存分别在.MYD.MYI文件下(这就是非聚......
  • ⛳ Docker 安装 MySQL
    ⛳Docker安装MySQL......
  • 【MySQL 8.0】通过mysqldump与mysqlimport迁移表
    [mysql@node01~]$mysql-uroot-pabcd.1234-hnode01-Dtpcc10(root@node01)>selectcount(*)fromcustomer;+----------+|count(*)|+----------+|300000|+----------+1rowinset(0.06sec)(root@node01)>select@@global.secure_file_priv;......