当前位置: 首页 > news >正文

【重学MySQL】九十七、MySQL目录结构与文件系统解析

【重学MySQL】九十七、MySQL目录结构与文件系统解析

  • 一、MySQL 目录结构
    • 1.1 核心目录与文件
    • 1.2 存储引擎与文件关联
    • 2.3 查看默认数据库
  • 二、表在文件系统中的表示
    • 2.1 MyISAM 引擎
    • 2.2 InnoDB 引擎
    • 2.3 InnoDB 文件格式与行格式
  • 三、表空间配置与管理
    • 3.1 独立表空间 vs 系统表空间
    • 3.2 表空间扩展与调整
  • 四、常见问题与解决方案
    • 4.1 数据目录修改
    • 4.2 表空间不足
    • 4.3 文件权限问题
  • 五、版本差异与兼容性
    • 5.1 MySQL 5.7 vs 8.0
    • 5.2 升级注意事项
  • 六、总结

一、MySQL 目录结构

1.1 核心目录与文件

  • 数据目录(datadir)

    • 默认路径
      • Linux:/var/lib/mysql
      • Windows:C:\ProgramData\MySQL\MySQL Server X.X\Data
    • 查询命令
      SHOW VARIABLES LIKE 'datadir';
      
    • 子目录与文件
      • 数据库子目录:每个数据库对应一个子目录,名称与数据库同名,如mysqlinformation_schema
      • 系统文件
        • .frm:表结构定义文件(所有存储引擎通用)。
        • .ibd:InnoDB独立表空间文件(仅当innodb_file_per_table=ON时生成)。
        • .MYD.MYI:MyISAM表的数据和索引文件。
  • 其他关键文件

    • 日志文件
      • 错误日志:hostname.err(路径通过SHOW VARIABLES LIKE 'log_error';查询)。
      • 慢查询日志:记录执行时间超过long_query_time的查询。
      • 二进制日志:记录数据变更操作,用于复制和恢复。
    • 配置文件
      • my.cnf(Linux)或my.ini(Windows),包含全局配置如datadirinnodb_file_per_table
    • 临时文件
      • 排序、连接等操作产生的临时文件,通常位于/tmp(Linux)或系统临时目录(Windows)。

1.2 存储引擎与文件关联

存储引擎文件类型文件扩展名特点
MyISAM表结构、数据、索引.frm, .MYD, .MYI数据与索引分离存储,支持表级锁,无事务支持。
InnoDB表结构、独立表空间.frm, .ibd支持事务、行级锁、崩溃恢复,默认启用独立表空间(MySQL 8.0)。
MEMORY内存表无磁盘文件数据存储在内存中,速度快,但服务器重启后数据丢失。
CSVCSV格式数据.csv, .csm数据存储为CSV文件,便于与其他工具(如Excel)交互。

2.3 查看默认数据库

查看一下在我的计算机上当前有哪些数据库:

  SHOW  DATABASES ;

可以看到有4个数据库是属于MySQL自带的系统数据库。

  • mysql
    MySQL 系统自带的核心数据库,它存储了MySQL的用户账户和权限信息, 一些存储过程、事件的定义信息, 一些运行过程中产生的日志信息, 一些帮助信息以及时区信息等。
  • information_schema
    MySQL 系统自带的数据库,这个数据库保存着MySQL服务器 维护的所有其他数据库的信息 ,比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引。这些信息并不是真实的用户数据,而是一些描述性信息,有时候也称之为 元数据 。在系统数据库 information_schema 中提供了一些以innodb_sys 开头的表,用于表示内部系统表。
mysql>  USE  information_schema ; Database  changedmysql>  SHOW  TABLES  LIKE   'innodb_sys% ' ;|  Tables_in_information_schema  (innodb_sys%)   |+--------------------------------------------+
|  INNODB_SYS_DATAFILES                                                    |
|  INNODB_SYS_VIRTUAL                                                        |
|  INNODB_SYS_INDEXES                                                         |
|  INNODB_SYS_TABLES                                                            |
|  INNODB_SYS_FIELDS                                                          |
|  INNODB_SYS_TABLESPACES                                                 |
|  INNODB_SYS_FOREIGN_COLS                                               |
|  INNODB_SYS_COLUMNS                                                        |
|  INNODB_SYS_FOREIGN                                                          |
|  INNODB_SYS_TABLESTATS                                                   |10  rows  in  set  (0 .00  sec)
  • performance_schema
    MySQL 系统自带的数据库,这个数据库里主要保存MySQL服务器运行过程中的一些状态信息,可以用来 监控 MySQL 服务的各类性能指标 。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等信息。
  • sys
    MySQL 系统自带的数据库,这个数据库主要是通过 视图 的形式把 information_schema 和 performance_schema 结合起来,帮助系统管理员和开发人员监控 MySQL 的技术性能。

二、表在文件系统中的表示

2.1 MyISAM 引擎

  • 文件组成
    • .frm:存储表结构定义(列名、数据类型、索引等元数据)。
    • .MYD(MyData):存储实际数据,采用固定或动态长度格式。
    • .MYI(MyIndex):存储B+树结构的索引(主键索引和辅助索引)。
  • 示例
    • user(MyISAM引擎)对应文件:user.frmuser.MYDuser.MYI

2.2 InnoDB 引擎

  • 文件组成
    • .frm:存储表结构定义(与MyISAM共享)。
    • .ibd(独立表空间文件):存储数据和索引(聚簇索引结构),仅在启用innodb_file_per_table=ON时生成。
    • 系统表空间:若未启用独立表空间,所有表共享ibdata1文件,包含元数据、Undo日志等。
  • 示例
    • order(InnoDB引擎,启用独立表空间)对应文件:order.frmorder.ibd

2.3 InnoDB 文件格式与行格式

  • 文件格式
    • Antelope:旧格式,支持COMPACTREDUNDANT行格式(MySQL 5.7及之前默认)。
    • Barracuda:新格式,支持DYNAMICCOMPRESSED行格式(MySQL 8.0默认)。
  • 行格式
    • REDUNDANT:兼容旧版本,变长字段前768字节存储在索引页,剩余在溢出页。
    • COMPACT:空间效率高(比REDUNDANT节省约20%),但增加CPU开销。
    • DYNAMIC:变长字段完全存储在溢出页,支持大索引前缀(最大3072字节)。
    • COMPRESSED:在DYNAMIC基础上增加数据压缩,适用于存储大量文本或BLOB。

三、表空间配置与管理

3.1 独立表空间 vs 系统表空间

配置项独立表空间(推荐)系统表空间
启用方式my.cnf中设置innodb_file_per_table=1默认或显式关闭innodb_file_per_table
文件存储单表对应.ibd文件所有表数据存储在ibdata1
优点便于管理单个表,支持快速备份和恢复减少文件数量,适合小型数据库
缺点增加文件系统开销表删除后空间无法自动回收

3.2 表空间扩展与调整

  • 扩展系统表空间
    ALTER TABLESPACE my_tablespace ADD DATAFILE 'my_tablespace2.ibd' SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE 5G;
    
  • 独立表空间自动扩展
    CREATE TABLESPACE my_tablespace ADD DATAFILE 'my_tablespace.ibd' SIZE 1G AUTOEXTEND ON NEXT 100M MAXSIZE 5G;
    

四、常见问题与解决方案

4.1 数据目录修改

  • 步骤
    1. 停止MySQL服务:sudo systemctl stop mysql(Linux)或通过服务管理器(Windows)。
    2. 备份数据:复制原数据目录至新路径。
    3. 修改配置文件:在my.cnf中更新datadir路径。
    4. 移动文件:将备份的数据文件移动至新目录。
    5. 重启服务:sudo systemctl start mysql
    6. 验证路径:SHOW VARIABLES LIKE 'datadir';

4.2 表空间不足

  • 解决方案
    • 扩展系统表空间:通过ALTER TABLESPACE添加新数据文件或调整现有文件大小。
    • 清理空间:删除无用表或数据,优化表结构(如重建索引)。

4.3 文件权限问题

  • 解决命令
    sudo chown -R mysql:mysql /new/data/path  # 修改目录所有权
    sudo chmod -R 755 /new/data/path          # 修改目录权限
    

五、版本差异与兼容性

5.1 MySQL 5.7 vs 8.0

特性MySQL 5.7MySQL 8.0
默认文件格式AntelopeBarracuda
独立表空间需手动启用默认启用
SQL Mode默认包含STRICT_TRANS_TABLES更严格,移除部分兼容性选项

5.2 升级注意事项

  • 数据迁移:使用mysqldump导出数据,再导入新版本,避免因文件格式变化导致错误。
  • 配置兼容性:检查旧版本配置(如innodb_file_format)是否与新版本兼容。

六、总结

  • 目录结构:以datadir为核心,存储数据库、表及日志文件,不同存储引擎文件格式差异显著。
  • 表表示:MyISAM采用三文件结构,InnoDB依赖.frm.ibd(或系统表空间),通过合理配置表空间和行格式可优化性能。
  • 管理建议:生产环境优先启用独立表空间,定期备份数据,关注版本升级后的配置变化。

通过深入理解MySQL的目录结构与文件表示,可有效提升数据库管理效率,确保数据安全与性能优化。

http://www.xdnf.cn/news/1416799.html

相关文章:

  • 2025年06月 Scratch 图形化(四级)真题解析#中国电子学会#全国青少年软件编程等级考试
  • Dify之插件开发之Crawl4ai 爬虫(简单逻辑实现)
  • 【XR技术概念科普】VST(视频透视)vs OST(光学透视):解码MR头显的两种核心技术路径
  • 高并发场景下的热点数据处理:从预热到多级缓存的性能优化实践
  • Java 双链表
  • 云市场周报 (2025.09.01):解读腾讯云向量数据库、阿里云西安节点与平台工程
  • 【Pycharm】Pychram软件工具栏Git和VCS切换
  • 【数据可视化-105】Pyecharts主题组件:让你的图表瞬间高大上
  • 飞牛nas修改crontab计划默认编辑器
  • leetcode-hot-100 (贪心算法)
  • 构建共享新生态的智慧物流开源了
  • TensorFlow 2.10 是最后一个支持在原生Windows上使用GPU的TensorFlow版本
  • TensorFlow深度学习实战(36)——自动机器学习(AutoML)
  • Golang之GoWorld深度解析:基于Go语言的分布式游戏服务器框架
  • 【最新版】Win11 24H2 正式版2025年8月版 Windows11的24H2全系列下载 官方原版光盘系统ISO文件下载
  • .net 微服务jeager链路跟踪
  • Java全栈开发工程师面试实战:从基础到微服务的完整技术演进
  • 嵌入式学习(day37) 数据库 Sqlite相关命令函数
  • Flutter 本地持久化存储:Hive 与 SharedPreferences 实战对比
  • 基于FPGA的多协议视频传输IP方案
  • Kubernetes 中根据 Pod IP 查找 Pod 及关联服务的方法
  • Fiddler抓包原理及教程(附带解决高版本Android抓包无网络问题)
  • 【Android】Span富文本简介
  • Python 爬虫案例:爬取豆瓣电影 Top250 数据
  • 华为云CCE
  • 【Flask】测试平台开发,实现全局邮件发送工具 第十二篇
  • [免费]基于Python的气象天气预报数据可视化分析系统(Flask+echarts+爬虫) 【论文+源码+SQL脚本】
  • 【Proteus仿真】蜂鸣器控制系列仿真——蜂鸣器控制/蜂鸣器播放音乐/蜂鸣器播放多种音乐/蜂鸣器和LED组成报警装置
  • 如何在Github中创建仓库?如何将本地项目上传到GitHub中?
  • 【HTML】draggable 属性:解锁网页交互新维度