MySQL文件结构

一、文件结构

运行show global variables like "datadir",查看数据目录位置,打开数据目录,即可得到上述文件列表。



二、数据库

每个数据库,即schema,对应一个同名目录。




三、表文件

每一个MySQL表主要由三部分组成:元数据、索引、数据。元数据即表定义等基本信息。


MyISAM

每一个MyISAM表,在对应的schema目录下,均对应三个同名的.frm,   .MYI,   .MYD文件。


存放内容如下

.frm:元数据

.MYI:索引

.MYD:数据


说明:可以通过在不同的数据库目录之间,自由移动上述三个文件,来实现MyISAM表的移动。而InnoDB表无法通过移动文件实现表的移动。


InnoDB

每一个InnoDB表,在对应的schema目录下,均对应一个同名.frm文件,此文件无实际意义。

全部表的元数据,都存放在系统表空间。

每个表的索引和数据,要么同时存放在共享的系统表空间,要么同时存放在各自的FILE_PER_TABLE表空间。


系统表空间

组成:ibdata文件集合,如ibdata1,ibdata2等。

位置:顶层数据目录。

类型:全局共享,所有数据库的所有表共享ibdata文件。

作用:

1. 存放全部表的元数据;

2. 作为undo log, change buffer, doublewrite buffer等的存储区;

3. 存放部分表的索引和数据。


FILE_PER_TABLE表空间

组成:与该表同名的.ibd文件,如employee.ibd。

位置:对应的schema目录

类型:每个表有自己的表空间,每个表空间有自己的.ibd数据文件。

作用:存放该表的索引和数据。


说明:

1. 系统表空间和FILE_PER_TABLE表空间只服务于InnoDB类型的表,即ibdata1和.ibd文件为InnoDB所有;

2. 当全局系统变量innodb_file_per_table = off时,新创建的表索引和数据,存放在系统表空间,即ibdata中;

3. 当全局系统变量innodb_file_per_table = on时,创建新表时,会同时创建同名的.idb文件,用于存放该表的索引和数据;

4. 可以通过运行RENAME TABLE db1.tbl_name TO db2.tbl_name命令,实现innodb表在不同数据库之间的移动。



四、重做日志

重做日志,即innodb redo log,又名日志组。

文件:ib_logfile文件集合,如ib_logfile0和ib_logfile1。

位置:顶层数据目录。

作用:所有需要修改InnoDB表数据的SQL语句和底层API调用,都被编码保存到重做日志。如果由于异常,导致数据更新没有同步到数据文件,如事物执行到一半发生崩溃,MySQL在重启时,将根据重做日志,将未完成的操作进行下去,以确保数据一致性。


五、示例图



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值