MySQL Server会通过几种方式使用其磁盘空间,主要的目录和文件都会放在一个称为”服务数据目录”(server’s data directory)的地方。MySQL会使用这个数据目录来存储:
数据库目录(database directory)。不管你在数据库中建立何种类型的表,每个数据库都只会对应存在一个单一目录。
在Windows中,如:
C:\Program Files\MySQL\MySQL Server5.7\data
对表结构进行描述的表格式文件(.frm文件)。不管哪个存储引擎进行的表管理,每个表都有其.frm文件,存在其对应的数据库目录下。
在Windows中,如:
C:\Program Files\MySQL\MySQL Server 5.7\data\\.frm
对应每张表由存储引擎建立的数据和索引文件,也会被存放在相应的数据库目录下。如MyISAM存储引擎对应某张表所建立的数据文件及索引文件。
在Windows中:
C:\Program Files\MySQL\MySQL Server 5.7\data\\myd
C:\Program Files\MySQL\MySQL Server 5.7\data\\.myi
InnoDB存储引擎所拥有的表空间及日志文件。
在Windows中:
C:\Program Files\MySQL\MySQL Server 5.7\data\ib_logfile0
服务日志文件和状态文件。这些文件包含了MySQL Server已处理或正处理的语句信息。日志文件可用于问题排查(troubleshooting),监控,复制(replication)和数据恢复。
触发器也会和其受影响的表一起存储在相应数据库目录中。
MySQL也会将其系统数据库(mysql)存储在磁盘上,其中包含了用户,权限,插件,帮助内容,事件,时区实现等各种信息。
2.4.1 数据目录
有关数据目录的大致层级关系,我们可以从上图有进行了解。应该注意的是许多层级中都是对应特定存储引擎的。然而,不管存储引擎如何使用,所建的每个表都会有一个*.frm(包括视图view)文件。请确保MySQL server对数据目录的权限正确以进行文件建立操作。换言之,你必须保证server在其数据目录下的任何位置具有相应权限以建立数据文件或日志文件。
在MySQL数据目录中,MySQL Server会对其每个数据库匹配一个目录,并为数据库中的表匹配相应文件名。这里存在一些潜台词:
在操作系统中(如大多Unix系统),MySQL Server的数据库和表名都是大小写敏感。
标准的系统操作命令都可用于MyISAM存储引擎管理的表,进行诸如备份,重命名,移动,删除,拷贝表等操作。举个例子,我们可以通过重命名表对应的.myd, .myi和.frm文件来重命名一张MyISAM引擎表。(当然,你也可以使用RENAME TABLE或ALTER TABLE … RENAME命令来重命名文件)。
也有可能我们需要移动整个数据目录,或某些数据库,或单个表(依赖于存储引擎)到其他位置,这样通过对不同磁盘的使用以达到更好的性能。