安装目录

  • bin

数据目录

数据存储路径:

  1. mysql> SHOW VARIABLES LIKE 'datadir';
  2. +---------------+-----------------------+
  3. | Variable_name | Value |
  4. +---------------+-----------------------+
  5. | datadir | /usr/local/var/mysql/ |
  6. +---------------+-----------------------+
  7. 1 row in set (0.00 sec)

数据库在文件系统中的表示

  • 每创建一个数据库, 都会在数据目录下创建一个子目录
  • 子目录 db.opt/, 数据库的各种属性

表在文件系统中的表示

表数据的分类:

  • 表结构的定义: table_name.frm
  • 表中的数据, 不同的存储引擎实现不一样

InnoDB 中存储表数据的方式:

  • 表空间 (或文件空间), 它对应多个页
  • 表空间分类
    • 系统表空间, 对应文件系统上的一个或多个文件 (ibdata1, 12M, 不够用时自动扩展), 默认将数据存这里
      • 系统表空间只有一份
      • 从MySQL5.5.7到MySQL5.6.6之间的各个版本中,我们表中的数据都会被默认存储到这个 系统表空间。
# 自定义系统表空间的文件名
[server]
innodb_data_file_path=data1:512M;data2:512M:autoextend
  • 独立表空间, MySQL 5.6.6 以及之后的版本, 每个表有一个独立的表空间, tablename.ibd
# 配置使用系统表空间
# 1: 使用独立表空间
[server]
innodb_file_per_table=0

# 系统表空间转独立表空间
ALTER TABLE 表名 TABLESPACE [=] innodb_file_per_table;
# 独立表空间转系统表空间
ALTER TABLE 表名 TABLESPACE [=] innodb_system;
  • 其他类型表空间
    • 通用表空间
    • undo 表空间
    • 临时表空间

MyISAM 中存储表数据的方式:

分为数据文件和索引文件:

  • *.frm
  • *.MYD 数据文件
  • *.MYI 索引文件

视图在文件系统中的表示

  • 视图是查询语句的别名, 不存储真实数据
  • viewname.frm

其他文件

  • 服务器进程文件, 进程 ID
  • 服务器日志文件
  • SSL, RSA, 密钥文件

文件系统对数据库的影响

因为MySQL的数据都是存在文件系统中的,就不得不受到文件系统的一些制约:

  • 数据库名称和表名称不得超过文件系统所允许的最大长度
  • 特殊字符的问题
    • 为了避免因为数据库名和表名出现某些特殊字符而造成文件系统不支持的情况,MySQL会把数据库名和表名中所有除数字和拉丁字母以外的所有字符在文件名里都映射成 @+编码值的形式作为文件名。比方说我们创建的表的名称为’test?’,由于?不属于数字或者拉丁字母,所以会被映射成编码值,所以这个表对应的.frm文件的名称就变成了test@003f.frm。
  • 文件长度受文件系统最大长度限制

MySQL系统数据库简介

mysql

存储了MySQL的用户账户和权限信息,一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。

information_schema

保存着MySQL服务器维护的所有其他数据库的信息,比如有哪些表、哪些视图、哪些触发器、哪些列、哪些索引吧啦吧啦。这些信息并不是真实的用户数据,而是一些描述性信息

performance_schema

这个数据库里主要保存MySQL服务器运行过程中的一些状态信息,算是对MySQL服务器的一个性能监控。包括统计最近执行了哪些语句,在执行过程的每个阶段都花费了多长时间,内存的使用情况等等信息。

sys

这个数据库主要是通过视图的形式把information_schema和performance_schema结合起来,让程序员可以更方便的了解MySQL服务器的一些性能信息。