MySQL文件结构
2015-08-06 17:00
591 查看
一、文件结构
运行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数据文件。
作用:存放该表的索引和数据。
特性:可以通过运行RENAME TABLE db1.tbl_name TO db2.tbl_name命令,实现FILE_PER_TABLE表在不同数据库之间的移动。
说明:
1. 系统表空间和FILE_PER_TABLE表空间只服务于InnoDB类型的表,即ibdata1和.ibd文件为InnoDB所有;
2. 当全局系统变量innodb_file_per_table = off时,新创建的表索引和数据,存放在系统表空间,即ibdata中;
3. 当全局系统变量innodb_file_per_table = on时,创建新表时,会同时创建同名的.idb文件,用于存放该表的索引和数据。
四、重做日志
重做日志,即innodb redo log,又名日志组。
文件:ib_logfile文件集合,如ib_logfile0和ib_logfile1。
位置:顶层数据目录。
作用:所有需要修改InnoDB表数据的SQL语句和底层API调用,都被编码保存到重做日志。如果由于异常,导致数据更新没有同步到数据文件,如事物执行到一半发生崩溃,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数据文件。
作用:存放该表的索引和数据。
特性:可以通过运行RENAME TABLE db1.tbl_name TO db2.tbl_name命令,实现FILE_PER_TABLE表在不同数据库之间的移动。
说明:
1. 系统表空间和FILE_PER_TABLE表空间只服务于InnoDB类型的表,即ibdata1和.ibd文件为InnoDB所有;
2. 当全局系统变量innodb_file_per_table = off时,新创建的表索引和数据,存放在系统表空间,即ibdata中;
3. 当全局系统变量innodb_file_per_table = on时,创建新表时,会同时创建同名的.idb文件,用于存放该表的索引和数据。
四、重做日志
重做日志,即innodb redo log,又名日志组。
文件:ib_logfile文件集合,如ib_logfile0和ib_logfile1。
位置:顶层数据目录。
作用:所有需要修改InnoDB表数据的SQL语句和底层API调用,都被编码保存到重做日志。如果由于异常,导致数据更新没有同步到数据文件,如事物执行到一半发生崩溃,MySQL在重启时,将根据重做日志,将未完成的操作进行下去,以确保数据一致性。
五、示例图
相关文章推荐
- SQL Server数据迁移到MySQL
- placeholder <>'' a?b:c mysqli
- mysql like语句
- mysql 数据备份与还原
- mysql指令
- MYSQL里的函数
- mysql 判断指定条件数据存不存在,不存在则插入
- MySql连接10060问题教训
- mysql 字段类型VARCHAR转换成DECIMAL
- 导出mysql数据表
- Mysql onduplicate key
- mysql 二进制安装文件 下载
- 摘抄 mysql 相关信息
- mysql 普通表转分区表
- MySQL Cluster初步学习资料整理--安装部署新特性性能测试等
- mysql-proxy 读写分离
- mysql Amoeba 配置
- mysql 误删root
- mysql 慢查询说明
- 安装mysql Install/Remove of the Service Denied!错误的解决办法