本文摘自PHP中文网,作者coldplay.xixi,侵删。
mysql教程栏目介绍MySQL物理文件。
1.数据库的数据存储文件
MySQL 数据库会在data目录下面建立一个以数据库为名的文件夹,用来存储数据库中的表文件数据。不同 的数据库引擎,每个表的扩展名也不一样 ,例如: MyISAM 用“ .MYD ”作为扩展名, Innodb 用 “.ibd” , Archive 用 “.arc” ,CSV 用 “.csv“。
1. ".FRM"文件
8.0之前无论是那种存储引擎,创建表之后就一定会生成一个以表明命名的'.frm'文件。frm文件主要存放与表相关的数据信息,主要包括表结构的定义信息。当数据库崩溃时,用户可以通过frm文件来恢复数据表结构。
2. ".MYD"文件
“.MYD”文件是MyISAM存储引擎专用,存放MyISAM表的数据。每一个MyISAM表都会有一个“.MYD”文件与 之对应,同样存放于所属数据库的文件夹 下, 和“.frm”文件在一起。
3. ".MYI"文件
“.MYI”文件也是专属于MyISAM存储引擎的,主要存放MyISAM表的索引相关信息。对于MyISAM存储来说, 可以被cache 的内容主要就是来源 于“.MYI”文件中。 每一个MyISAM表对应一个“.MYI”文件,存放于位置 和“.frm”以及“.MYD”一样。
4. ".ibd"文件与".ibdata"文件
这两种文件都是存放 Innodb 数据的文件,之所以有两种文件来存放Innodb的数据(包括索引),是因为 Innodb 的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据。独享表空间存储方式使用“.ibd”文件来存放数据,且每个表一个“.ibd”文件 ,文件存放在和MyISAM数据相同的位置。如果选用共享存储表空间来存放数据,则会使用 ibdata 文件来存放,所有表共同使用一个 (或者多个,可自行配置)ibdata文件。
ibdata文件可以通过 innodb_data_home_dir
(数据存放目录)和 innodb_data_file_path
(配置每个文件的名称) 两个参数配置组成 innodb_data_file_path
中可以一次配置多个ibdata文件 #innodb_data_file_path = ibdata1:2000M;ibdata2:10M:autoextend
配置方式共享表空间以及独占表空间都是针对数据的存储方式而言的。
共享表空间: 某一个数据库的所有的表数据,索引文件全部放在一个文件中。
独占表空间: 每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有 一个.ibd文件。其中这个文件包括了 单独一个表的数据 内容以及索引内容。
4.1 两者对比
共享表空间:
优点: 可以放表空间分成多个文件存放到各个磁盘上。数据和文件放在一起方便管理。
缺点: 所有的数据和索引存放到一个文件中,多个表及索引在表空间中混合存储,这样对于一个表做了大量删除操作后表空间中将会有大量的空隙,特别是对于统计分析,日志系统这类应用最不适合用共享表空间。
独立表空间:
优点:
每个表都有自已独立的表空间。
每个表的数据和索引都会存在自已的表空间中。
可以实现单表在不同的数据库中移动。
空间可以回收
a)
Drop table
操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过:alter table TableName engine=innodb
;回收不用的空间。b) 对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理。 缺点:单表增加过大,如超过100 G。 相比较之下,使用独占表空间的效率以及性能会更高一点 共享表空间和独立表空间之间的转换。
1 2 3 4 5 |
|
2. 日志
日志文件:查询日志、慢查询日志、错误日志、事务日志、binlog日志、错误日志、中继日志
2.1 查询日志
查询日志在mysql中被称之为 general log
(通用日志),不要被"查询日志"的名字误导,错误的以为查询日志只会记录select语句,其实不然,查询日志记录了数据库执行的命令,不管这些语句是否正确,都会被记录,我想这也是 general log
之所以"通用"的原因吧,由于数据库操作命令有可能非常多而且执行比较频繁,所以当开启了查询日志以后,数据库可能需要不停的写入查询日志,这样会增大服务器的IO压力,增加很多系统开销,所以默认情况下,mysql的查询日志是没有开启的,但是开启查询日志也有助于我们分析哪些语句执行密集,执行密集的select语句对应的数据是否能够被缓存,查询日志也可以帮助我们分析问题,所以,我们可以根据实际情况决定是否开启查询日志,如果需要可以手动开启。如果开启了查询日志,那么我们可以通过如下3种方式存储查询日志。
方式1:将查询日志存放于指定的日志文件中。
方式2:将查询日志存放于
mysql.general_log
表中。方式3:将查询日志同时存放于指定的日志文件与mysql库的general_log表中。
查看查询日志是否开启
1 |
|
1 |
|
general_log:表示查询日志是否开启,ON表示开启,OFF表示未开启,默认为OFF
log_output:表示当查询日志开启以后,以哪种方式存放,log_output可以设置为4种值,"FILE"、"TABLE"、"FILE,TABLE"、"NONE"。
1 2 3 4 5 6 7 8 |
|
2.2 慢日志
所谓的慢查询就是通过设置来记录超过一定时间的SQL语句!
开启MySQL的慢查询日志功能
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
- flie方式
select sleep(10)
执行完成查看日志
1 2 3 4 5 |
|
table方式
日志分析工具 mysqldumpslow
查看 mysqldumpslow 的帮助信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
2.3 错误日志
错误日志(Error Log)是 MySQL 中最常用的一种日志,主要记录 MySQL 服务器启动和停止过程中的信 息、服务器在运行过程中发生的故障和异常情况等。
相关阅读 >>
更多相关阅读请进入《mysql》频道 >>

数据库系统概念 第6版
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。