《MySQL系列-InnoDB引擎01》MySQL体系结构和存储引擎

第一章 MySQL体系结构和存储引擎

1 数据库和实例

  数据库:物理操作系统或者其他文件类型的集合,在MySQL中通常以frm、idb、MYD、MYI结尾的文件。

  数据库实例:MySQL数据库实例在系统上的表现就是一个进程。

  小结 => 数据库与数据库实例通常是一一对应的关系。但是在集群情况下,可能会存在一个数据库被多个数据实例使用的情况。

2 MySQL配置文件

  当启动实例时,MySQL数据库会去读配置文件,根据配置文件的参数来启动数据库实例。通过以下命令,可以查看当MySQL数据库实例启动时,会在哪些位置查找配置文件。

[root@zxy_master /]# mysql --help | grep my.cnforder of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf ~/.my.cnf

  如上所示,MySQL数据库是按照顺序依次读取。那么就会存在这种情况:如果这几个文件都有同一个配置参数,那么MySQL会以哪个为准?MySQL会以读取到的最后一个配置文件的参数为准。在Linux环境下,配置文件通常会在/etc/my.cnf处。在Windows环境下,配置文件后缀名可能是.cnf,也有可能是.ini

3 MySQL数据库路径

  MySQL启动配置文件后,就可以正常的创建数据库并进行使用了,那么我们创建的数据库文件是怎么存储的,存储在哪个位置呢?可通过以下命令查询:

mysql> show variables like 'datadir'\G;
*************************** 1. row ***************************
Variable_name: datadirValue: /var/lib/mysql/
1 row in set (0.00 sec)

  如上所示,MySQL的数据库文件存储到/var/lib/mysql/目录下,在这个目录下,会有文件夹名对应你的数据库名称。数据库中的每个表一般有两个文件,分别是.frm.ibd来存储表空间和表数据。这两个文件可用来备份、迁移数据库。

通过表的.frm和.idb文件备份MySQL表

4 MySQL体系结构

在这里插入图片描述

MySQL体系结构通常由这几部分组成:

  • 连接池组件
  • 管理服务和工具组件
  • SQL接口和工具组件
  • 查询分析器组件
  • 优化器组件
  • 缓冲组件
  • 插件式存储引擎
  • 物理文件

  结合图可以看出,MySQL数据库区别于其他数据库的最重要的一个特点就是插件式表存储引擎。需要注意的是存储引擎是基于表的,而不是数据库的

5 MySQL存储引擎

  每个存储引擎都有各自的特点,能够根据具体的应用建立不同的存储引擎表。MySQL的存储引擎可以分为MySQL官方存储引擎和第三方存储引擎。例如InnoDB最初的时候就是第三方引擎,后被Oracle收购,InnoDB引擎的应用极其广泛。

  可通过show engines命令查看数据库中的存储引擎列表

mysql> show engines\G;
*************************** 1. row ***************************Engine: InnoDBSupport: DEFAULTComment: Supports transactions, row-level locking, and foreign keys
Transactions: YESXA: YESSavepoints: YES
*************************** 2. row ***************************Engine: MRG_MYISAMSupport: YESComment: Collection of identical MyISAM tables
Transactions: NOXA: NOSavepoints: NO
*************************** 3. row ***************************Engine: MEMORYSupport: YESComment: Hash based, stored in memory, useful for temporary tables
Transactions: NOXA: NOSavepoints: NO
*************************** 4. row ***************************Engine: BLACKHOLESupport: YESComment: /dev/null storage engine (anything you write to it disappears)
Transactions: NOXA: NOSavepoints: NO
*************************** 5. row ***************************Engine: MyISAMSupport: YESComment: MyISAM storage engine
Transactions: NOXA: NOSavepoints: NO
*************************** 6. row ***************************Engine: CSVSupport: YESComment: CSV storage engine
Transactions: NOXA: NOSavepoints: NO
*************************** 7. row ***************************Engine: ARCHIVESupport: YESComment: Archive storage engine
Transactions: NOXA: NOSavepoints: NO
*************************** 8. row ***************************Engine: PERFORMANCE_SCHEMASupport: YESComment: Performance Schema
Transactions: NOXA: NOSavepoints: NO
*************************** 9. row ***************************Engine: FEDERATEDSupport: NOComment: Federated MySQL storage engine
Transactions: NULLXA: NULLSavepoints: NULL
9 rows in set (0.00 sec)

5.1 InnoDB存储引擎

  InnoDB存储引擎支持事务、行锁设计、支持外键,主要面向OLTP数据库应用。支持类似于Oracle的非锁定读,即默认读取操作不会产生锁。从MySQL 5.5.8版本开始,默认的存储引擎就是InnoDB存储引擎。

  InnoDB存储表由frm和ibd组成,frm为表空间,idb为表数据

5.2 MyISAM存储引擎

  MyISAM存储引擎不支持事务、表锁设计,支持全文索引,主要面向一些OLAP数据库应用。MyISAM的特点是,它的缓冲池只缓存索引文件,不缓存数据文件。

  MyISAM存储表由MYD和MYI组成,MYD用来存放数据文件,MYI用来存放索引文件。

5.3 NDB存储引擎

  NDB存储引擎是一个集群存储引擎,其结构是share nothing的集群结构,因此能提供更高的可用性。NDB的特点是数据全部放在内存中(从MySQL 5.1版本开始,可以将非索引数据放在磁盘上),因此主键查找的速度极快。NDB有一个问题值得注意的是,NDB存储引擎的连接操作(JOIN)是在MySQL数据库层完成,而不是存储引擎层完成,这意味着复杂的连接操作,需要巨大的网络开销。

5.4 Memory存储引擎

  Memory存储引擎将表中数据存放在内存中,如果数据库重启或发生故障,则表中数据都将消失。所以它更适合存储临时数据,以及数据仓库的维度表。Memory存储引擎默认使用哈希索引,而不是B+树索引。

  需要注意的是,MySQL数据使用Memory存储引擎作为临时表来存放查询的中间结果集。如果中间结果集大于Memory存储引擎表的容量设置,又或者中间结果含有含有TEXT或BLOB列类型字段,则MySQL数据库会把其转换到MyISAM存储引擎表而存放到磁盘中。之前提到的MyISAM不缓存数据文件,因此这时产生的临时表的性能对于查询会有损失。

5.5 Archive存储引擎

  Archive存储引擎只支持INSERT和SELECT操作,从MySQL5.1开始支持索引。Archive存储引擎使用zlib算法将数据行进行压缩后存储,压缩比为1:10。正如其名字所示,Archive存储引擎非常适合存储归档数据,例如日期信息。

  Archive存储引擎使用行锁来实现高并发的插入操作,但是其本身并不支持事务安全的存储引擎,其设计目标主要是提供插入和压缩功能。

5.6 Federated存储引擎

  Federate的存储引擎表并不存放数据,它是指向一台远程MySQL数据库服务器上的表。

6 连接MySQL

  需要理解的是,连接MySQL操作是一个连接进程和MySQL数据库实例进行通信。从程序设计角度来说,本质上是进程通信。常用的进程通信方式有管道、命名管道、命名字、TCP/IP套接字、UNIX域套接字。MySQL数据库提供的连接方式从本质上看都是上述提及的进程通信方式。

6.1 TCP/IP

  TCP/IP套接字是MySQL数据库在任何平台下都提供的连接方式,也是网络中使用最多的一种方式,这种方式在TCP/IP连接上建立一个基于网络的连接请求,一般情况下客户端(client)在一台服务器上,而MySQL实例(server)在另一台服务器上,这两台服务器通过TCP/IP网络连接。

  当客户端在请求连接MySQL实例的时候,MySQL实例会优先检验客户端的用户名以及IP是否允许登录。而校验的标准就是根据MySQL数据库中的user权限视图。

6.2 命名管道和共享内存

  在Windows 2000、Windows XP、Windows 2003和Windows Vista以及在此之上的平台上,如果两个需要进程通信的进程在同一台服务器上,那么可以使用命名管道,Microsoft SQL Server数据库默认安装后的本地连接也是使用命名管道。在MySQL数据库中需要在配置文件中启用--enable-named-pipe选项。在MySQL4.1之后的版本中,MySQL还提供了共享内存的连接方式,通过在配置文件中添加--shared-memory实现的。如果想使用共享内存的方式,在连接时,MySQL客户端还必须使用--protocol=memory选项。

6.3 UNIX域套接字

  在Linux和UNIX环境下,还可以使用UNIX域套接字。UNIX域套接字起始不是网络协议,所以只能在MySQL客户端和数据库实例在一台服务器上的情况下使用。用户可以在配置文件中指定套接字文件的路径,如--socket=/tmp/mysql.sock。当数据库实例启动后,用户可以通过以下命令进行UNIX域套接字文件的查找:


mysql> show variables like 'socket';
+---------------+---------------------------+
| Variable_name | Value                     |
+---------------+---------------------------+
| socket        | /var/lib/mysql/mysql.sock |
+---------------+---------------------------+
1 row in set (0.00 sec)

  通过-S指定UNIX域套接字登录

[root@zxy_master zxy]# mysql -uroot -S /var/lib/mysql/mysql.sock -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 572
Server version: 5.7.38-log MySQL Community Server (GPL)Copyright (c) 2000, 2022, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>

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

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

相关文章

关于“Python”的核心知识点整理大全48

目录 world_population.py 16.2.5 制作世界地图 americas.py 16.2.6 在世界地图上呈现数字数据 na_populations.py 16.2.7 绘制完整的世界人口地图 world_population.py 16.2.8 根据人口数量将国家分组 world_population.py 16.2.9 使用 Pygal 设置世界地图的样式 w…

docker小白第九天

docker小白第九天 安装redis集群 cluster(集群)模式-docker版本,哈希槽分区进行亿级数据存储。如果1~2亿条数据需要缓存,请问如何设计这个存储案例。单机存储是不可能的,需要分布式存储,如果使用redis又该如何部署。 哈希取余分…

数据结构——红黑树 and B-树

红黑树 根据平衡条件第4、5两点 最短路径,都是黑色 最长路径,红黑相间 最长是最短的两倍 B-树

k8s-cni网络 10

Flannel vxlan模式跨主机通信原理 在同一个节点上的pod 流量通过cni网桥可以直接进行转发; 在需要跨主机访问时,数据包通过flannel(隧道) 知道另一边的mac地址,就可以拿到另一边的ip地址,然后构建常规的以太网数据包,…

泛目录是干什么用的蚂蚁seo泛程序

泛目录是干什么用的蚂蚁seo泛程序目录 泛目录是一种常见的网站优化方法,属于黑帽技术的一种。它的核心原理是利用高权重的网站继承目录,然后快速获得收录与排名。这种方法可以帮助网站在搜索引擎中获得更好的排名,从而吸引更多的流量。 泛目…

白话机器学习的数学-1-回归

1、设置问题 投入的广告费越多,广告的点击量就越高,进而带来访问数的增加。 2、定义模型 定义一个函数:一次函数 y ax b (a 是斜率、b 是截距) 定义函数: 3、最小二乘法 例子: 用随便确定的参…

flutter学习-day21-使用permission_handler进行系统权限的申请和操作

文章目录 1. 介绍2. 环境准备2-1. Android2-2. iOS 3. 使用 1. 介绍 在大多数操作系统上,权限不是在安装时才授予应用程序的。相反,开发人员必须在应用程序运行时请求用户的许可。在 flutter 开发中,则需要一个跨平台(iOS, Android)的 API 来…

计算机网络:知识回顾

0 本节主要内容 问题描述 解决思路 1 问题描述 通过一个应用场景来回顾计算机网络涉及到的协议(所有层)。如下图所示场景: 学生Bob将笔记本电脑用一根以太网电缆连接到学校的以太网交换机;交换机又与学校的路由器相连&#xf…

scratch打砖块游戏 2023年12月中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析

scratch打砖块游戏 2023年12月电子学会图形化编程Scratch等级考试三级真题 一、题目要求 1、准备工作 (1)删除小猫角色,选择角色小球Ball、砖块Button3和球板Paddle (2)选择背景Stars,在背景底端绘制一条红色的线段 (3)建立一个变量“分数” 2、功能实现 (1)…

GoLang学习之路,对Elasticsearch的使用,一文足以(包括泛型使用思想)(二)

书写上回,上回讲到,Elasticsearch的使用前提即:语法,表结构,使用类型结构等。要学这个必须要看前面这个:GoLang学习之路,对Elasticsearch的使用,一文足以(包括泛型使用思…

【STM32】程序在SRAM中运行

程序在RAM中运行 1、配置内存分配。 2、修改跳转文件 FUNC void Setup(void) { SP _RDWORD(0x20000000); PC _RDWORD(0x20000004); } LOAD RAM\Obj\Project.axf INCREMENTAL Setup(); 3、修改下载ROM地址和RAM地址; 中断向量表映射 中断向量表映射到SRA…

应用在网络摄像机领域中的国产音频ADC芯片

IPC:其实叫“网络摄像机”,是IP Camera的简称。它是在前一代模拟摄像机的基础上,集成了编码模块后的摄像机。它和模拟摄像机的区别,就是在新增的“编码模块”上。模拟摄像机,顾名思义,输出的是模拟视频信号…

Apache DolphinScheduler 3.1.9 版本发布:提升系统的稳定性和性能

🚀我们很高兴宣布,Apache DolphinScheduler 的最新版本 3.1.9 已正式发布!此版本在 3.1.8 的基础上进行了关键的 bug 修复和文档更新,共计修复了 14 个 bug 和改进了 3 个文档。 主要更新亮点 本次更新重点解决了以下几个关键问题…

阿里云30个公共云地域、89个可用区、5个金融云和政务云地域

阿里云基础设施目前已面向全球四大洲,公共云地域开服运营30个公共云地域、89个可用区,此外还拥有5个金融云、政务云地域,并且致力于持续的新地域规划和建设,从而更好的满足用户多样化的业务和场景需求。伴随着基础设施的加速投入和…

AI大模型引领未来智慧科研暨丨ChatGPT在地学、GIS、气象、农业、生态、环境等领域中的高级应用

以ChatGPT、LLaMA、Gemini、DALLE、Midjourney、Stable Diffusion、星火大模型、文心一言、千问为代表AI大语言模型带来了新一波人工智能浪潮,可以面向科研选题、思维导图、数据清洗、统计分析、高级编程、代码调试、算法学习、论文检索、写作、翻译、润色、文献辅助…

Unity Window安装包制作

Unity Window安装包制作 介绍一、RAR自解压方式1、找到Unity打包的可执行程序2.创建自解压文件3.配置设置4、最后点击确定等待压缩完成即可(默认生成位置为你选中文件右键点击添加到压缩文件时的路径) 二、Setup Factory工具安装制作Window安装包相关常用…

助力城市部件[标石/电杆/光交箱/人井]精细化管理,基于YOLOv6开发构建生活场景下城市部件检测识别系统

井盖、店杆、光交箱、通信箱、标石等为城市中常见部件,在方便居民生活的同时,因为后期维护的不及时往往会出现一些“井盖吃人”、“线杆、电杆、线缆伤人”事件。造成这类问题的原因是客观的多方面的,这也是城市化进程不断发展进步的过程中难…

Vue - Class和Style绑定详解

1. 模板部分 <template><div><!-- Class 绑定示例 --><div :class"{ active: isActive, text-danger: hasError }">Hello, Vue!</div><!-- Class 绑定数组示例 --><div :class"[activeClass, errorClass]">Cla…

10. Opencv检测并截取图中二维码

1. 说明 在二维码扫描功能开发中,使用相机扫描图片时,往往图片中的信息比较多样,可能会造成二维码检测失败的问题。一种提高检测精度的方式就是把二维码在图片中单独抠出来,去除其它冗余信息,然后再去识别这张提取出来的二维码。本篇博客记录采用的一种实现二维码位置检测…

编程笔记 GOLANG基础 003 Go语言开发环境搭建

编程笔记 GOLANG基础 003 Go语言开发环境搭建 一、安装VSCODE二、安装GO语言主程序 Golang的学习从开发环境搭建开始。本例记录的是WINDOWS平台下使用VSCODE做为开发工具的搭建过程。网上查到的资料都是以前版本的方法&#xff0c;新版Golang发生了一些变化。各位参数环境搭建时…