mysql 体系结构和存储引擎介绍

 更新时间:2022年05月06日 16:21:02   作者:​ 斜月   ​  
这篇文章主要介绍了mysql 体系结构和存储引擎,通过mysql数据库常见的数据库引擎展开各个引擎之间的特性和区别。下文更多相关资料介绍感兴趣的小伙伴可以参考一下

1 前言

mysql 是一个单进程多线程架构的可移植的数据库,mysql 数据库实例在系统上的表现就是一个进程,可以在所有的平台上运行。

mysql 的整体架构图如下图所示: 

2 mysql 配置文件加载顺序

mysql 启动会读取配置文件,根据配置文件的参数启动数据库实例,数据库的配置文件为my.cnf,按照/etc/my.cnf -> /etc/mysql/my.cnf -> /usr/local/mysql/etc/my.cnf -> ~/my.cnf配置文件进行顺序加载,如果有相同的配置,则以最后一个加载的为准,这个和 springboot 的配置文件加载启动顺序是类似的。

3 mysql 引擎介绍

存储引擎是基于表的,而不是数据库。关于数据库引擎的语句为:

# 修改数据库引擎的语句
alter table table_name engine=MyISAM;
# 查询数据库可以支持的数据库引擎
show engines

查看数据库支持的引擎结果如下图所示: 

 mysql 存储引擎有 InnoDB,MyISAM,NDB 引擎,Memory 引擎, Archive 引擎,Federated 引擎,Maria 引擎。

3.1 InnoDB 引擎

InnoDB 存储引擎支持事务,其涉及目标主要是面向在线事务处理(OTLP),其特点是支持行锁和外键,并支持非锁定读(即读取数据默认不会加锁),从 mysql 5.5.8 版本开始,InnoDB 存储引擎就是mysql 的默认存储引擎。

InnoDB 存储引擎将数据存放在一个逻辑表空间中。InnoDB 通过使用多版本并发控制(MVCC)来获得高并发性的性能,并实现了SQL标准的4中隔离级别,默认使用 repeatable 级别。同时 innodb 引擎使用 next-locking 的测了来避免幻读现象的产生。除此之外,Innodb 引擎还提供了插入缓存,二次写,自适应哈希索引,预读等高性能和高可用的功能。

Innodb 存储引擎采用了聚集的方式,因此每张表都是按照主键的顺序进行存放的。如果没有显示的指定表的主键,那么存储引擎会为每行生成一个6字节的 rowid ,并以此作为主键使用。

3.2 MyISAM 引擎

MyISAM 存储引擎不支持事务、支持表锁不支持行锁,支持全文索引,主要面向一些 OLAP 数据库应用。数据库系统和文件系统很大的一个不同点在于对事务的支持,然而MyISAM存储引擎不支持事务,InnoDB 引擎支持,其引擎的缓冲池之缓存索引文件,而不缓存数据文件,这个和大多数的数据库不同。

MyISAM 存储引擎表是由 MYD 和 MYI 组成的一个系统,前者用于存放数据文件,后者是存放索引文件。

3.3 NDB 引擎

NDB 引擎是一个集群存储引擎,其结构是 share nothing 的集群架构,因此能够提供高可用性。NDB 的特点是数据全部存放在内存中,因此根据主键查询的效率速度极快,并且通过添加存储节点来提高数据库的性能。该存储引擎的连接操作是在数据库底层完成的,而不是在存储引擎层完成的,如果是复杂的数据库连接需要巨大的网络开销,查询速度比较慢。

3.4 Archive 引擎

Archive 引擎只支持 insert 和 select 操作,从 mysql5.1 之后开始支持索引,可以使用 zlib 算法进行数据行的压缩,压缩比可以达到 1:10,改引擎特别适合做数据的归档操作,比如说日志信息。该引擎使用行锁来实现高并发的插入操作,但是其本身不是事务安全的,其设计目的主要是提供高速插入和压缩功能。

3.5 Federated 引擎

Federated 存储引擎并不存放数据,它只是指向远程 mysql 数据库服务器上的表,改引擎只支持mysql 数据库表,不支持异构数据表。

3.6 Maria 引擎

Maria 引擎是新开发的数据库引擎,其设计目的是用来取代 MyISAM 引擎,从而成为 MySQL 的默认存储引擎。该引擎的特点是:支持缓存数据和索引文件,应用了行锁设计,提供了 MVCC 功能,支持事务和非事务安全的选项,以及更好的 BLOB 字符类型的处理性能。

3.7 其它引擎

除了以上提到的数据库引擎外,还有CSVMerge等数据库引擎, 感兴趣的可以继续关注学习。

4 总结

到此这篇关于mysql 体系结构和存储引擎介绍的文章就介绍到这了,更多相关mysql 存储引擎内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • MySQL 5.7常见数据类型

    MySQL 5.7常见数据类型

    这篇文章主要介绍了MySQL 5.7数据类型详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-07-07
  • Mysql常用运算符与函数汇总

    Mysql常用运算符与函数汇总

    本文给大家汇总介绍了mysql中的常用的运算符以及常用函数的用法及示例,非常的全面,有需要的小伙伴可以参考下
    2017-09-09
  • zabbix监控mysql的实例方法

    zabbix监控mysql的实例方法

    在创建监控项之前要尽量考虑清楚要监控什么,怎么监控,监控数据如何存储,监控数据如何展现,如何处理报警等。本文主要介绍了zabbix监控mysql的实现方法,感兴趣的可以了解一下
    2021-06-06
  • 分享MYSQL插入数据时忽略重复数据的方法

    分享MYSQL插入数据时忽略重复数据的方法

    当程序中insert时,已存在的数据不插入,不存在的数据insert。在网上搜了下,可以使用存储过程或者是用NOT EXISTS 来判断是否存在
    2013-09-09
  • MySQL中ON DUPLICATE KEY UPDATE语句的使用

    MySQL中ON DUPLICATE KEY UPDATE语句的使用

    INSERT INTO ... ON DUPLICATE KEY UPDATE 是一个强大的SQL语句,它结合了插入新记录和更新已存在记录的功能于一体,本文就来介绍一下MySQL中ON DUPLICATE KEY UPDATE语句的使用,感兴趣的可以了解一下
    2024-08-08
  • MySQL 整体架构介绍

    MySQL 整体架构介绍

    这篇文章主要介绍了MySQL 整体架构的相关资料,帮助大家更好的了解和使用MySQL数据库,感兴趣的朋友可以了解下
    2020-10-10
  • MySQL出现Waiting for table metadata lock的原因方法

    MySQL出现Waiting for table metadata lock的原因方法

    在本篇内容里小编给大家整理了MySQL出现Waiting for table metadata lock的原因以及解决方法对此有需要的朋友们学习下。
    2019-05-05
  • 解读索引列中有null值会不会使索引失效

    解读索引列中有null值会不会使索引失效

    这篇文章主要介绍了解读索引列中有null值会不会使索引失效问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • Ubuntu手动安装mysql5.7.10

    Ubuntu手动安装mysql5.7.10

    这篇文章主要为大家详细介绍了Ubuntu手动安装mysql5.7.10的详细过程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • Linux下mysql5.6.33安装配置教程

    Linux下mysql5.6.33安装配置教程

    这篇文章主要为大家详细介绍了Linux下mysql5.6.33安装配置方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-04-04

最新评论