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

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

1 数据库和实例

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

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

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

2 MySQL配置文件

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

[root@zxy_master /]# mysql --help | grep my.cnf
                      order 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: datadir
        Value: /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: InnoDB
     Support: DEFAULT
     Comment: Supports transactions, row-level locking, and foreign keys
Transactions: YES
          XA: YES
  Savepoints: YES
*************************** 2. row ***************************
      Engine: MRG_MYISAM
     Support: YES
     Comment: Collection of identical MyISAM tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 3. row ***************************
      Engine: MEMORY
     Support: YES
     Comment: Hash based, stored in memory, useful for temporary tables
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 4. row ***************************
      Engine: BLACKHOLE
     Support: YES
     Comment: /dev/null storage engine (anything you write to it disappears)
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 5. row ***************************
      Engine: MyISAM
     Support: YES
     Comment: MyISAM storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 6. row ***************************
      Engine: CSV
     Support: YES
     Comment: CSV storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 7. row ***************************
      Engine: ARCHIVE
     Support: YES
     Comment: Archive storage engine
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 8. row ***************************
      Engine: PERFORMANCE_SCHEMA
     Support: YES
     Comment: Performance Schema
Transactions: NO
          XA: NO
  Savepoints: NO
*************************** 9. row ***************************
      Engine: FEDERATED
     Support: NO
     Comment: Federated MySQL storage engine
Transactions: NULL
          XA: NULL
  Savepoints: 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>

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MIT线性代数笔记-第31讲-线性变换及对应矩阵

目录 31.线性变换及对应矩阵打赏 31.线性变换及对应矩阵 线性变换相当于是矩阵的抽象表示,每个线性变换都对应着一个矩阵 例: 考虑一个变换 T T T,使得平面上的一个向量投影为平面上的另一个向量,即 T : R 2 → R 2 T:R^2 \to R…

CDN 原理

CDN 原理 CND 一般包含分发服务系统、负载均衡系统和管理系统 分发服务系统 其基本的工作单元就是各个 Cache 服务器。负责直接响应用户请求,将内容快速分发到用户;同时还负责内容更新,保证和源站内容的同步。 根据内容类型和服务种类的不…

gitlab请求合并分支

直接去看原文: 原文链接:Gitlab合并请求相关流程_source branch target branch-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------- 入口: 仓库控制台的这两个地方都…

RedisConnectionFailureException: Unable to connect to Redis; 报错解决

一 Unable to connect to Redis报错提示 项目启动时都会报错:RedisConnectionFailureException: Unable to connect to Redis; nested exception is io.lettuce.core.RedisConnectionException 如图: 提示是不能正确连接到redis,连接问题的问…

关于苹果iOS 16:揭开伪装成飞机模式的隐形蜂窝接入漏洞的动态情报

一、基本内容 在日常生活中,网络威胁不断演变,给个人和组织带来了一系列重大挑战。网络犯罪分子使用的一种最常见的、最具破坏性的方法之一就是网络钓鱼。这种攻击方式通过电子邮件、短信或其他通讯渠道冒充可信实体,诱使个人泄露敏感信息&am…

Flink版本更新汇总(1.14-1.18)

0、汇总 1.14.0 1.有界流支持 Checkpoint; 2.批执行模式支持 DataStream 和 Table/SQL 混合应用; 3.新增 Hybrid Source 功能; 4.新增 缓冲区去膨胀 功能; 5.新增 细粒度资源管理 功能; 6.新增 DataStream 的 Pulsar …

特征归一化及其原理--机器学习

归一化是数据预处理中的一种常见操作,其目的是将不同特征的数值范围统一或缩放到相似的尺度。这有助于提高模型的性能,加速模型的收敛,并使模型更加稳健。以下是进行归一化的一些原因和原理: 消除特征间的尺度差异: 不…

计算机网络概述(上)——“计算机网络”

各位CSDN的uu们好呀,好久没有更新小雅兰的计算机网络的专栏啦,而且期末考试也要考计算机网络,所以,小雅兰就来写计算机网络的内容啦!!!下面,让我们进入计算机网络概述的世界吧&#…

php 之 redisk 扩展问题

系统: ARM V10 server (1229) 软件: php、phpdevel redis5.1.0RC1 redis5.1.0RC1.tgz phpredis 编译: 解压进入目录内: # phpize # ./configure withphpconfig/usr/bin/phpconfig # make # make ins…

物理层概述

目录 基本介绍 四个重要特性 物理层的常用标准 EIA RS-232 EIA RS-449 RJ-45 数字传输系统 宽带接入技术 基本介绍 物理层是网络体系结构中的最低层,它既不是指连接计算机的具体物理设备,也不是指负责信号传输的具体物理介质,而是指…

新年团圆时,关爱近在咫尺

转眼间,元旦将至,在这团圆时刻,也可以关心常在,这份长辈用机指南请查收! 一、畅连视频,随时随地与家人连线,新年团圆,让爱近在咫尺 二、家庭空间,全天候监测家人身体状况…

每日一题——LeetCode922

方法一 双指针: 一个偶指针一个奇指针,偶指针每次都指向nums里的偶数,奇指针每次指向nums里的奇数,两个指针交替push进新数组即可: var sortArrayByParityII function(nums) {var even0,odd0,res[],flagtruewhile(r…

什么是Web 3.0以及为什么它很重要【译文】

作者:马克斯-默施和理查德-穆尔黑德 什么技术使30多亿人每天80%的清醒时间受益?就是Web 2.0。 Web 2.0是OReilly等人在1999年至2004年间提出的,它将世界从为信息消费而设计、由昂贵的服务器提供的静态桌面网页转向互动体验和用户生成的内容&a…

AI日报:大型律师事务所首次推出人工智能工具撰写合同

欢迎订阅专栏 《AI日报》 获取人工智能邻域最新资讯 总览 英国的Allen&Overy推出了一款可以为律师撰写合同的人工智能工具,名为ContractMatrix。 它利用现有的合同模板起草新的合同,律师可以接受或修改。 1000多名律师正在使用该工具。今年1月&…

React学习计划-React16--React基础(六)路由

路由 一、版本5路由 1. react-router-dom 2. 路由的使用 1. 基础使用 安装&#xff1a;yarn add react-router-dom5明确好界面中的导航区、展示区导航区Link标签包裹 <Link to"/home">Home</Link>展示区写在Route标签进行匹配 <Route path/home …

elasticsearch系列七:聚合查询

概述 今天咱们来看下es中的聚合查询&#xff0c;在es中聚合查询分为三大类bucket、metrics、pipeline&#xff0c;每一大类下又有十几种小类&#xff0c;咱们各举例集中&#xff0c;有兴许的同学可以参考官网&#xff1a;https://www.elastic.co/guide/en/elasticsearch/refere…

使用vivado使用的方法以及遇到的错误

文章目录 前言一、Vivado运行RTL分析闪退二、在创建完工程后修改开发板型号三、引脚分配时&#xff0c;没有对应引脚或是I/O Std四、创建bit流文件五、安装Modelsim的流程&#xff08;有一步很重要&#xff09;六、和谐Modelsim七、vivado联合Modelsim进行仿真 前言 学习vivad…

VSCode 如何安装插件的历史版本

背景 在日常开发过程中&#xff0c;我们可能会遇到新版VSCode插件存在问题&#xff0c;无法正常工作的情况。这种情况下&#xff0c;一种可行的解决方案就是安装插件的历史版本。VSCode 插件默认安装的都是插件最新的版本&#xff0c;例如下面 vscode-styled-compoents 插件 本…

【Harmony OS - Stage应用模型】

基本概念 大类分为&#xff1a; Ability Module&#xff1a; 功能模块 、Library Module&#xff1a; 共享功能模块 编译时概念&#xff1a; Ability Module在编译时打包生成HAP&#xff08;Harmony Ability Package&#xff09;&#xff0c;一个应用可能会有多个HAP&#xf…

记一次应急响应练习(Linux)

记一次应急响应练习(Linux) Linux&#xff1a; 请提交攻击者的IP地址 答&#xff1a; 192.168.31.132 思路&#xff1a; 通过查看历史命令和开放的8080端口看到这台主机上运行的是Tomcat服务。并且在历史命令中看到了Tomcat的安装路径。那么就算是找到了日志的查看点了&#x…