网站首页/技术开发列表/内容

MySQL数据目录结构(1)转

技术开发2024-04-12阅读

MySQL数据目录结构(1)


[晏子]
从概念上讲,大多数关系数据库系统是相似的:它们有一系列数据库组成,每个数据库包含一系列数据库表,但每个系统有各自组织其管理的数据方式,MySQL也不例外。
缺省地,所有由MySQL服务器mysqld管理的数据存储在一个称为MySQL数据目录的地方,所有数据库都存放在哪儿,也包括提供服务器操作信息的状态文件。如果你对一个MySQl安装执行管理任务,你应该熟知数据目录的布局及用途。
本文介绍下列专题:

1、数据目录的位置


一个缺省数据目录被编译进了服务器,如果你从一个源代码分发安装MySQL,典型的缺省目录为/usr/local/var,如果从RPM文件安装则为/var/lib/mysql,如果从一个二进制分发安装则是/usr/local/mysql/data。
在你启动服务器,通过使用一个--datadir=/path/to/dir选项可以明确指定数据目录位置。如果你想把数据目录置于其它缺省位置外的某处,这很有用。
作为一名MySQL管理员,你应该知道你的数据目录在哪里。如果你运行多个服务器,你应该是到所有数据目录在哪里,但是如果你不知道确切的位置,由多种方法找到它:

2、数据目录结构


MySQL数据目录包含了服务器管理的所有数据目录,这些文件被组织成一个树状结构,通过利用Unix或Windows文件系统的层次结构直接实现。
数据目录也包含由服务器产生的几个状态文件,如日志文件。这些文件提供了关于服务器操作的重要信息。对管理特别在出了问题而试图确定问题原因时很有价值。例如,如果某个特定查询杀死服务器,你可以通过检查日志文件判别捣乱的查询。

2.1 MySQL服务器怎样提供对数据的访问


在数据目录下的一切由一个单独的实体-MySQL服务器mysqld管理,客户程序绝不直接操作数据。相反,服务器提供数据可访问的切入点,它是客户程序与它们想使用的数据之间的中介。
当服务器启动时,如果有需要,它打开日志文件,然后通过监听网络连接位数据目录呈现一个网络接口。要访问数据,客户程序建立对服务器的一个连接,然后以MySQL查询传输请求来执行希望的操作。服务器执行每一个操作并将结果发回用户。服务器是多线程的并能服务多个同时的客户连接。然而,因为修改操作一个执行一个,实际效果是顺序化请求,以使两个客户决不能在同一时刻改变同一记录。
在正常的情况下,让服务器作为数据库访问的唯一仲裁者提供了避免可从同时访问数据库表的多个进程的破坏的保证。管理员应该知道有时服务器没有对数据目录的独裁控制。

2.2 数据目表示


每个MySQL服务器管理的数据库有自己的数据库表,它是数据目录下的一个子目录,其名字与它表示的数据库相同。例如数据库my_db对应于数据库目录DATADIR/my_db。
这种表示允许多个数据库级的语句在其实现中十分简单。CREATE DATABASE db_name在数据目录中创建一个db_name空目录,具有只允许MySQL服务器用户(运行服务器的Unix用户)的属主和模式,这等价于下列手工在服务器主机上创建数据库:
%mkdir DATADIR/db_name%chmod 700 DADADIR/db_name

用一个空目录表示一个新数据库的最简单方法与其它数据库甚至为一个空数据库创建大量的控制文件或系统文件正好相反。
DROP DATABASE语句实现同样简单。DROP DATABASE db_name删除数据库中的db_name目录和所有表文件,这几乎与下列命令一样:
%rm -rf DATADIR/db_name

(差别是服务器只删除具有已知用于表的后缀名的文件。如果你在数据库目录创建了其它文件。则服务器保留它们,而且目录本身不被删除。
SHOW DATABASE基本上不做什么,只是列出位于数据目录中的目录名。有些数据库系统保持一个主表,用于维护所有数据库,但在MySQL无此构件。由于赋予数据目录结构的简洁性,数据库列表隐含在数据目录的内容中,而且这样的表不必有额外的开销。

2.3 数据库表的表示


每个数据库在数据库目录中有3个文件:一个样式(描述文件)、一个数据文件和一个索引文件。每个文件的基本名是表名,文件名扩展名代表文件类型。扩展名如下表。数据和索引文件的扩展名指出表使用老式IASM索引或新式MyISAM索引。
表 MySQL文件类型
相关阅读