《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://xiahunao.cn/news/2660651.html

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

相关文章

docker compose 部署 grafana + loki + vector 监控kafka消息

Centos7 随笔记录记录 docker compose 统一管理 granfana loki vector 监控kafka 信息。 当然如果仅仅是想通过 Grafana 监控kafka,推荐使用 Grafana Prometheus 通过JMX监控kafka 目录 1. 目录结构 2. 前提已安装Docker-Compose 3. docker-compose 自定义服…

关于java选择结构switch及反编译

关于java选择结构switch及反编译 在上一篇文章中,我们了解了选择结构中的if else等,本章内容让我们说明一下上一篇文章中的伏笔,switch选择结构🤔 switch多选择结构 多选择结构:多选择结构除了else if ,…

Codeforces Round 918 (Div. 4)(AK)

A、模拟 B、模拟 C、模拟 D、模拟 E、思维,前缀和 F、思维、逆序对 G、最短路 A - Odd One Out 题意:给定三个数字,有两个相同,输出那个不同的数字。 直接傻瓜写法 void solve() {int a , b , c;cin >> a >>…

YOLOv5改进 | 2023主干篇 | 华为最新VanillaNet主干替换Backbone实现大幅度长点

一、本文介绍 本文给大家来的改进机制是华为最新VanillaNet网络,其是今年最新推出的主干网络,VanillaNet是一种注重极简主义和效率的神经网络架构。它的设计简单,层数较少,避免了像深度架构和自注意力这样的复杂操作(需要注意的是…

鸿蒙Harmony(十一)Stage模型

Stage模型:HarmonyOS 3.1 Developer Preview版本开始新增的模型,是目前主推且会长期演进的模型。在该模型中,由于提供了AbilityStage、WindowStage等类作为应用组件和Window窗口的“舞台”,因此称这种应用模型为Stage模型。 UIAb…

verilog rs232串口模块

前面发了个发送模块,这次补齐,完整。 串口计数器,波特率适配 uart_clk.v module uart_clk(input wire clk,input wire rst_n,input wire tx_clk_en,input wire rx_clk_en,input wire[1:0] baud_sel,output wire tx_clk,output wire rx_clk )…

js遍历后端返回的集合将条件相同的放入同一个数组内

项目场景: echarts折线图需要根据条件动态展示多条不同曲线 解决方案: 后端直接将使用sql将数据查询出来返回即可,因为我这里不是Java使用的C#不是很熟练后台不好写逻辑,所以在前端js完成的 代码如下: function createline(villagename, buildingname…

Centos7:Jenkins+gitlab+node项目启动(3)

Centos7:Jenkinsgitlabnode项目启动(1) Centos7:Jenkinsgitlabnode项目启动(1)-CSDN博客 Centos7:Jenkinsgitlabnode项目启动(2) Centos7:Jenkinsgitlabnode项目启动(2)-CSDN博客 Centos7:Jenkinsgitlabnode项目启…

Java ArrayList在遍历时删除元素

文章目录 1. Arrays.asList()获取到的ArrayList只能遍历,不能增加或删除元素2. java.util.ArrayList.SubList有实现add()、remove()方法3. 遍历集合时对元素重新赋值、对元素中的属性赋值、删除元素、新增元素3.1 普通for循环3.2 增强for循环3.3 forEach循环3.4 str…

116基于matlab的盲源信号分离

基于matlab的盲源信号分离。FASTICA方法,能够很好的将信号解混,可以替换数据进行分析。具有GUI界面,可以很好的进行操作。程序已调通,可直接运行。 116matlab盲源信号分离FASTICA (xiaohongshu.com)

20231228在Firefly的AIO-3399J开发板的Android11使用Firefly的DTS配置单前后摄像头ov13850

20231228在Firefly的AIO-3399J开发板的Android11使用Firefly的DTS配置单前后摄像头ov13850 2023/12/28 19:20 缘起,突然发现只能打开前置的ov13850,或者后置的ov13850。 但是不能切换! 【SDK:rk3399-android-11-r20211216.tar.xz】…

设备健康管理系统助力制造企业实现数字化转型

在当今快速变革的制造业环境中,数字化转型已成为制造企业保持竞争力和实现可持续发展的关键。在这个数字化转型的浪潮中,设备健康管理系统正发挥着重要的作用。设备健康管理系统通过实时监测、预测分析和智能诊断等功能,为制造企业提供了全面…

Flink实时电商数仓之DWS层

需求分析 关键词 统计关键词出现的频率 IK分词 进行分词需要引入IK分词器&#xff0c;使用它时需要引入相关的依赖。它能够将搜索的关键字按照日常的使用习惯进行拆分。比如将苹果iphone 手机&#xff0c;拆分为苹果&#xff0c;iphone, 手机。 <dependency><grou…

Kubernetes 学习总结(41)—— 云原生容器网络详解

背景 随着网络技术的发展&#xff0c;网络的虚拟化程度越来越高&#xff0c;特别是云原生网络&#xff0c;叠加了物理网络、虚机网络和容器网络&#xff0c;数据包在网络 OSI 七层网络模型、TCP/IP 五层网络模型的不同网络层进行封包、转发和解包。网络数据包跨主机网络、容器…

开箱即用的企业级数据和业务管理中后台前端框架Ant Design Pro 5的开箱使用和偏好配置

Ant Design Pro 介绍 Ant Design Pro 是一个开箱即用的企业级前端解决方案&#xff0c;基于 Ant Design 设计体系&#xff0c;提供了丰富的组件和功能&#xff0c;帮助开发者更快速地开发和部署企业级应用。 Ant Design Pro 使用 React、umi 和 dva 这三个主要的前端开发技术…

elementui+vue2 input输入框限制只能输入数字

方法1 自定义表单校验 <el-form :model"Formdata" ref"formRef" :rules"nodeFormRules" label-width"100px"><el-form-itemlabel"年龄"prop"age"><el-input v-model.number"Formdata.age&q…

HackTheBox-Machines--Photobomb

文章目录 1 端口扫描2 测试思路3 Web漏洞探测4 权限提升 Photobomb 测试过程 1 端口扫描 nmap -sC -sV 10.129.57.2102 测试思路 目标开启了22、80端口&#xff0c;所以测试点还是从80端口开始。 针对80端口的测试&#xff1a;   1.目录扫描   2.网页源代码   3.web漏洞 …

Java开发框架和中间件面试题(10)

目录 104.怎么保证缓存和数据库数据的一致性&#xff1f; 105.什么是缓存穿透&#xff0c;什么是缓存雪崩&#xff1f;怎么解决&#xff1f; 106.如何对数据库进行优化&#xff1f; 107.使用索引时有哪些原则&#xff1f; 108.存储过程如何进行优化&#xff1f; 109.说说…

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

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

node 项目中 __dirname / __filename 是什么,为什么有时候不能用?

__dirname 是 Node.js 中的一个特殊变量&#xff0c;表示当前执行脚本所在的目录的绝对路径。 __filename 同理&#xff0c;是 Node.js 中的一个特殊变量&#xff0c;表示当前执行脚本的绝对路径&#xff0c;包括文件名。 在 Node.js 中&#xff0c;__dirname / __filename是…