当前位置: 代码网 > it编程>数据库>Mysql > MySQL中的物理存储结构详解

MySQL中的物理存储结构详解

2025年03月12日 Mysql 我要评论
mysql的物理存储结构主要由数据文件、日志文件及存储引擎特定的组织方式构成。以下是其核心组成部分的详细说明:1. 数据目录结构mysql的数据存储在datadir配置指定的目录中,通常包含以下内容:

mysql的物理存储结构主要由数据文件、日志文件及存储引擎特定的组织方式构成。以下是其核心组成部分的详细说明:

1. 数据目录结构

mysql的数据存储在datadir配置指定的目录中,通常包含以下内容:

数据库目录:每个数据库对应一个子目录(如/var/lib/mysql/db_name),内部存放表的结构和数据文件。

表文件:不同存储引擎的表文件类型不同:

  • innodb.ibd(独立表空间文件)和.frm(8.0之前的结构文件,8.0后元数据存储在数据字典中)。
  • myisam.myd(数据文件)、.myi(索引文件)和.frm(结构文件)。
  • memory引擎:数据仅存储在内存中,无磁盘文件(表结构仍存于.frm)。

2. innodb存储引擎的物理结构

innodb采用索引组织表(iot),数据按主键顺序存储,物理结构分层如下:

表空间(tablespace)

  • 系统表空间(ibdata1):存储数据字典、undo日志(8.0前)、change buffer等。默认包含所有表的数据(若未启用独立表空间)。
  • 独立表空间(.ibd文件):每个表独立存储数据和索引(默认启用),提升管理灵活性。
  • 通用表空间:可存储多个表的数据,通过create tablespace创建。
  • undo表空间(8.0+):独立存储undo日志,默认undo_001undo_002
  • 临时表空间:存储临时表和排序操作数据。

存储单元层级

  • 段(segment):由多个区组成(如数据段、索引段、回滚段)。
  • 区(extent):由连续64个页构成(默认1mb,每页16kb)。
  • 页(page):最小磁盘管理单元(16kb),包含页头、行记录、页尾等信息。
  • 行(row):数据按行格式(如compact、dynamic)存储,dynamic格式处理大字段时仅存储溢出页指针。

日志文件

  • redo log(ib_logfile)*:物理日志,记录数据页修改,用于崩溃恢复。
  • undo log:逻辑日志,支持事务回滚和mvcc(8.0后存于undo表空间)。

3. myisam存储引擎的物理结构

数据与索引分离:表由三个文件组成:

  • .frm:表结构定义(8.0前)。
  • .myd:数据文件,按插入顺序存储。
  • .myi:索引文件,支持全文索引和压缩表。

特性:表级锁、无事务支持,适合读多写少场景。

4. 日志文件

  • 二进制日志(binlog):记录所有数据更改操作,用于主从复制和点恢复。
  • 错误日志(error log):记录服务器运行状态和错误信息。
  • 慢查询日志(slow query log):记录执行时间超过阈值的sql语句。

5. 内存结构辅助

  • 缓冲池(buffer pool):innodb缓存数据页和索引,减少磁盘i/o。
  • change buffer:缓存非唯一索引的变更,提升写入性能。

版本差异与注意事项

  • mysql 8.0+:移除.frm文件,元数据存于数据字典(mysql.ibd);默认undo日志独立。
  • 配置选项innodb_file_per_table控制是否启用独立表空间。
  • 行溢出处理:dynamic行格式对大字段(如blob)仅存储20字节指针,数据存于溢出页。

总结

  • innodb:适合事务处理,通过表空间、页结构和日志机制保障acid。
  • myisam:轻量级,适合静态数据,物理结构简单但缺乏事务支持。
  • 日志系统:保障数据持久性和系统可恢复性。

理解物理存储结构有助于优化数据库设计(如选择行格式、分区策略)和故障排查(如分析文件损坏问题)。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com