MySQL 数据目录
确定 MySQL 数据目录:
> SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)
MySQL 系统数据库
MySQL 还有几个系统数据库:
- mysql
存储了MySQL 的用户账户和权限信息,一些存储过程和事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息和时区信息。 - information_schema
保存MySQL服务器维护的所有其他数据库的元信息,比如哪些表,哪些视图,哪些触发器,哪些列和索引。 - performance_schema
主要保存MySQL服务器运行过程中的一些状态信息,主要作用用于对MySQL的性能监控。 - sys
差不多同上。
表空间
InnoDB 是使用页为基本单位来管理存储空间的。为了更好的管理这些页面,InnoDB 提出了 表空间 的概念。
这个表空间是一个抽象的概念,它可以对应文件系统上一个或多个真实文件,每一个表空间可以被划分为很多个页,表数据就存放在某个表空间下的某些页中。主要有以下类型:
-
系统表空间
在默认情况下,InnoDB 会在数据目录下创建一个名为 ibdata1文件,这个文件就是对应的系统表空间在文件系统上的展示,它是自动扩展的。在 MySQL 5.5.7 ~ MySQL 5.6.5 之间的各个版本,表中的数据都会被默认存储到这个系统表空间中。
系统表空间也支持我们自定义配置:[server] innodb_data_file_path=data1:512M;data2:512M:autoextend # 表示创建data1 和 data2 各自512MB大小作为系统表空间,data2 支持自动扩展大小。
-
独立表空间
在 MySQL 5.6.6 之后,InnoDB 不再默认把各个表的数据存储到系统表空间中,而是为每一个表建立一个独立的表空间。InnoDB 会在对应的数据库子目录中创建一个表名.frm
的文件存储表结构, 在对应的数据库子目录中创建一个表名.ibd
的文件存储数据。我们也可以自己决定使用系统表还是独立表空间,在配置文件中加入:
[server] innodb_file_per_table=0 # 0 表示使用系统表空间,1表示使用独立表空间。
该配置只针对新建的表,如果需要已经分配了的表可以使用命令迁移:
ALTER TABLE 表名 TABLESPACE innodb_system # 转移到系统表空间 ALTER TABLE 表名 TABLESPACE innodb_file_per_table # 转移到独立表空间
其他类型表空间
通用表空间,undo 表空间,临时表空间。