mysql的数据目录
知识来源:
- 《MySQL是怎样运行的》--- 小孩子4919
那mysql的数据到底放到哪里呢?其实是利用操作系统的文件系统,放在一个一个文件里面,甚至mysql的一些系统信息也是放在这些文件里面。
可以使用
show variables like "datadir";
查看数据目录层级结构如下:
数据目录
数据库目录
表结构文件
表数据文件(根据存储引擎不同,有不一样的文件创建方法)
数据库
其实一个数据库代表一个子目录
系统数据库
这些数据库,就是mysql自带的。
-
mysql:这个数据库相当重要,它存储了MySQL的用户账户和权限信息、一些存储过程和事件的定义信息、一些运行过程中产生的日志信息、一些帮助信息以及时区信 息等.
-
information_schema:这个数据库保存着MySQL服务器维护的所有其他数据库的信息, 比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引等.这些信息并不是真实 的用户数据,而是一些描述性信息,有时候也称之为元数据。
-
performance _ schema :这个数据库主要保存MySQL服务器运行过程中的一些状态信 息,算是对MySQL服务器的一个性能监控.它包含的信息有统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等。
-
像事务、锁之类的信息放在这里。
-
-
sys:这个数据库主要是通过视图的形式把information_ schema和performance_ schema结合起来,让开发人员更方便地了解MySQL服务榕的性能信息。
用户数据库
这些数据库就是由用户自己用
create database 数据库名;
创建的。
表
创建表后,mysql会在对应的数据库子目录中,创建表结构文件和表数据文件。
表结构文件都是以
表名.frm
的形式存储,而表数据文件会根据存储引擎不同会有所区分。
InnoDB表数据文件
-
表名.idb
:InnoDB的数据都存在这里面,也叫做独立表空间
。包括索引在内都放在这个文件中(文件被分成一个一个数据页,数据页内含索引、记录),毕竟聚簇索引就包含着数据。-
当然这个是MySQL5.6.6以及之后的版本出现的。在此之前的版本中,都是放在
系统表空间
中(存放在数据目录中的ibdata1文件)
-
MyISAM表数据文件
-
表名.MYD
:存放着记录,记录都是顺序追加,所以MyISAM的插入效率很高。 -
表名.MYI
:存放着索引。查询时通过索引查到,具体记录在表名.MYD
的行号或者地址偏移量,从而获取数据。
文件系统带来的限制
-
数据库名称和表名称不得超过文件系统所允许的最大长度。
-
数据库名和表名中所有除数字和拉丁字母以外的任何字符在文件名中都映射成@+编码值的形式,并将其作为文件名。比如:
test?
会变成test@003f
-
文件长度受文件系统最大长度的限制。