MySQL的数据文件存储
MyISAM引擎分为:静态、动态和压缩MyISAM三种:
静态MyISAM:如果数据表中的各数据列的长度都是预先固定好的,服务器将自动选择这种表类型。因为数据表中每一条记录所占用的空间都是一样的,所以这种表存取和更新的效率非常高。当数据受损时,恢复工作也比较容易做。
动态MyISAM:如果数据表中出现varchar、xxxtext或xxxBLOB字段时,服务器将自动选择这种表类型。相对于静态MyISAM,这种表存储空间比较小,但由于每条记录的长度不一,所以多次修改数据后,数据表中的数据就可能离散的存储在内存中,进而导致执行效率下降。同时,内存中也可能会出现很多碎片。因此,这种类型的表要经常用optimize table 命令或优化工具来进行碎片整理。
压缩MyISAM:以上说到的两种类型的表都可以用myisamchk工具压缩。这种类型的表进一步减小了占用的存储,但是这种表压缩之后不能再被修改。另外,因为是压缩数据,所以这种表在读取的时候要先时行解压缩。
但是,不管是何种MyISAM表,目前它都不支持事务,行级锁和外键约束的功能
每个数据库都会在data目录下生成一个文件夹。
在windows下默认路径为:C:\ProgramData\MySQL\MySQL Server 5.5 (ProgramData是一个隐藏文件夹)
MyISAM 类型表
对应三个文件:.frm, .MYD, .MYI
可以直接将这三个文件拷贝到其他的数据库下,可直接使用
CSV 类型表
对应三个文件:.frm, .CSV, .CSM
InnoDB 类型表
对应文件: .frm, .ibd
*.frm是描述了表的结构,保存了每个表的元数据,包括表结构的定义等,该文件与数据库引擎无关
*.MYD保存了表的数据记录,
*.MYI则是表的索引
*.ibd文件:InnoDB引擎开启了独立表空间(my.ini中配置innodb_file_per_table = 1)产生的存放该表的数据和索引的文件。
如果global变量innodb_file_per_table=0或OFF,则不会生成ibd文件,在设置innodb_file_per_table = 1之前创建的innodb表也不会生成ibd文件。是可以通过.frm和ibd文件进行数据恢复的
innodb如果不按照表存储的话,会将数据存储在 ..../data/ibdata1中
db.opt 文件是MySQL建库过程中自动生成的,是用来记录该库的默认字符集编码和字符集排序规则用的,如果你创建数据库指定默认字符集和排序规则,那么后续创建的表如果没有指定字符集和排序规则,那么该新建的表将采用db.opt文件中指定的属性。
比如:
default-character-set=utf8
default-collation=utf8_general_ci
MySQL 数据文件的存储位置
show global variables like "%datadir%";
日志位置
show global variables like "%error%";