MySQL 存储引擎

发布时间 2023-12-04 17:04:15作者: 背对背依靠

MySQL 常用存储引擎

1、存储引擎概念

简单来说,MySQL中的存储引擎是一种用于数据存储和检索的技术。它决定了如何在数据库中存储、处理和检索数据。

2、MySQL 存储引擎

Mysql中的存储引擎是针对表来进行操作的,同一个数据库中,每个表都可以使用不同的存储引擎。MySQL支持多种不同的存储引擎,不同的存储引擎提供了不同的数据处理功能,最常见的存储引擎包括:

  • InnoDB:MySQL默认使用的存储引擎,支持事务处理、行级锁定和外键,其设计目标是最大限度地减少磁盘I/O。

  • MyISAM: 早期MySQL版本的默认存储引擎,不支持事务处理或行级锁定,但在读取密集型操作(少量写入或更新)中表现良好。

  • MEMORY: 这个引擎使用内存来存储数据,适用于快速访问的临时数据。重启会丢失数据。

3、MySQL 数据存放

在MySQL中,数据是按照数据库和表的存储引擎在文件系统中以文件的形式存储。

  • 数据库:每个数据库都对应文件系统上的一个目录。这个目录通常位于MySQL的数据目录下,每个数据库的名字就是其对应目录的名字。

  • 数据表:每个数据库的目录下,存储着该数据库中所有表的相关文件。这些文件的类型和数量取决于表使用的存储引擎。

4、InnoDB 引擎

MySQL5.5以后使用的默认存储引擎就是innodb。在MySQL的默认配置中,采用共享表空间模式时,所有使用InnoDB存储引擎的表会将其数据和索引集中存储在一个名为ibdata1的共享文件中。

然而,MySQL也支持“文件每表”模式,在这种模式下,每个InnoDB表都使用各自的.ibd文件来独立存储其数据和索引。这种设置允许对每个表的存储进行更细粒度的管理。

共享表空间模式

共享表空间模式是MySQL的InnoDB存储引擎的一种数据存储方式。在这种模式下,所有使用InnoDB存储引擎的表会将其数据和索引存储在一个共享的表空间中。这个共享表空间通常由一个名为ibdata1的文件表示。


1、存储方式: 在共享表空间模式下,MySQL中所有InnoDB表的数据和索引不是按数据库分别存储在各自的目录中,而是集中存储在单个共享表空间文件中。这意味着不同数据库中的InnoDB表共享同一文件(如ibdata1)来存储它们的数据和索引。


2、文件大小: 由于所有InnoDB表的数据和索引都存储在同一个文件中,这个文件可能随着时间和数据量的增加而变得非常大。


3、备份和恢复: 共享表空间模式简化了对整个MySQL实例的备份和恢复过程,因为所有数据都集中在一个地方。然而,对单个表的备份和恢复变得更加复杂,因为每个表的数据与其他表的数据在同一个文件中混合存储。

文件每表模式

文件每表模式是让每个InnoDB表都使用自己的独立表空间文件(通常是.ibd文件),此时相关文件是存储在各自数据库目录中的,

修改模式方法

通过 mysqld的 innodb_file_per_table配置选项可以设置为文件每表模式

# 只会影响之后创建的表。已经存在的表仍将使用它们当前的存储方式,除非重新创建或迁移这些表。
[mysqld]
innodb_file_per_table=1

5、MyISAM引擎的表:

MySQL5.5版本以前使用的是myisam作为默认存储引擎,每个表会有三个文件:.frm(存储表结构)、.MYD(存储数据)、.MYI(存储索引)。

6、修改默认存储引擎

如果要修改默认的存储引擎,可以通过 mysqld的default-storage-engine 进行修改

[mysqld]
default-storage-engine=引擎名称