MySQL 的每个数据库都对应存放在一个与数据库同名的文件夹中,该文件夹由 MySQL 配置文件 /etc/my.cnf 定义,其中 datadir=/var/lib/mysql 就指定存放位置,MySQL 数据库文件包括 MySQL 所建数据库文件和 MySQL 所用存储引擎创建的数据库文件
$ cd
/var/lib/mysql
$ ls
#
MySQL
数据存放位置,其中
mytest
test 文件夹和数据库同名
auto.cnf client-cert.pem ib_logfile0 ibtmp1 mysql-bin.000002
mytest
public_key.pem spring_boot_demo
ca-key.pem client-key.pem ib_logfile1 mysql mysql-bin.000003 performance_schema server-cert.pem sys
ca.pem ib_buffer_pool ibdata1 mysql-bin.000001 mysql-bin.index private_key.pem server-key.pem
test
$ cd test
$
ll
#
.frm 分别对应一个同名表名
total 1584
-rw-r-----@ 1 mew staff 24 2 28 13:30 JPA_ADDRESSES.MYD
-rw-r-----@ 1 mew staff 2048 2 28 13:30 JPA_ADDRESSES.MYI
-rw-r-----@ 1 mew staff 8624 2 28 12:31
JPA_ADDRESSES.frm
-rw-r-----@ 1 mew staff 44 2 28 16:02 JPA_PERSONS.MYD
-rw-r-----@ 1 mew staff 3072 2 28 16:02 JPA_PERSONS.MYI
-rw-r-----@ 1 mew staff 8734 2 28 16:02
JPA_PERSONS.frm
-rw-r-----@ 1 mew staff 8586 3 16 15:58
a.frm
-rw-r-----@ 1 mew staff 98304 3 16 15:59 a.ibd
-rw-r-----@ 1 mew staff 8803 3 15 17:15
acc_login.frm
-rw-r-----@ 1 mew staff 147456 3 16 09:32 acc_login.ibd
-rw-r-----@ 1 mew staff 65 2 8 16:43 db.opt
-rw-r-----@ 1 mew staff 8618 3 7 15:29 goods.frm
-rw-r-----@ 1 mew staff 114688 3 9 16:21 goods.ibd
-rw-r-----@ 1 mew staff 18 2 28 12:31 hibernate_sequence.MYD
-rw-r-----@ 1 mew staff 1024 2 28 12:31 hibernate_sequence.MYI
-rw-r-----@ 1 mew staff 8568 2 28 12:31
hibernate_sequence.frm
-rw-r-----@ 1 mew staff 8733 3 7 14:58
methodLock.frm
-rw-r-----@ 1 mew staff 114688 3 7 15:02 methodlock.ibd
-rw-r-----@ 1 mew staff 8636 3 9 16:26
score.frm
-rw-r-----@ 1 mew staff 98304 3 9 16:26 score.ibd
-rw-r-----@ 1 mew staff 8714 3 8 10:10
time.frm
-rw-r-----@ 1 mew staff 98304 3 9 16:22 time.ibd
MySQL 创建并管理的数据库文件 :
.frm文件 : 存储数据表的框架结构,文件名与表名相同,每个表对应一个同名 frm文件,与操作系统和存储引擎无关,即不管 MySQL 运行在何种操作系统上,使用何种存储引擎,都有这个文件。除了必有的 .frm文件,根据 MySQL 所使用的存储引擎的不同 (MySQL 常用的两个存储引擎是 MyISAM 和 InnoDB),存储引擎会创建各自不同的数据库文件
MyISAM 表文件 :
.MYD : 即 MY Data,表数据文件
.MYI : 即 MY Index,索引文件
.log : 日志文件
InnoDB 表文件 : 采用表空间 (tablespace) 来管理数据,存储表数据和索引,InnoDB 数据库文件 (即 InnoDB文件集,ib-file set)
ibdata1、ibdata2等 : 系统表空间文件,存储 InnoDB系统信息和用户数据库表数据和索引,所有表共用,即 共享表空间数据文件
.ibd : 单表表空间文件,每个表使用一个表空间文件 (file per table),存放用户数据库表数据和索引
日志文件 : ib_logfile1、ib_logfile2
InnoDB 有 共享表空间 和 独立表空间 两种,MySQL 默认使用独立表空间,可以在 MySQL 配置文件 [mysqld] 部分增加 innodb_file_per_table 参数进行设定
独立表空间 :
优点 :
1> 每个表都有自已独立的表空间
2> 每个表的数据和索引都会存在自已的表空间中
3> 可以实现单表在不同的数据库中移动
4> 空间可以回收 (除 drop table 操作处,表空不能自已回收)
<1> drop table 操作自动回收表空间,如果对于统计分析或是日值表,删除大量数据后可以通过 : alter table TableName engine=innodb; 回缩不用的空间
<2> 对于使 innodb-plugin 的 Innodb 使用 turncate table 也会使空间收缩
<3> 对于使用独立表空间的表,不管怎么删除,表空间的碎片不会太严重的影响性能,而且还有机会处理
缺点 :
单表增加过大,如超过100个G
查看当前使用的是 共享表空间 还是 独立表空间
mysql> show variables like '%innodb_file_per%';
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
#
ON 代表独立表空间管理,OFF 代表共享表空间管理
+-----------------------+-------+
1 row in set (0.01 sec)
mysql> set global innodb_file_per_table=off;
# 设置为
共享表空间管理
Query OK, 0 rows affected (0.01 sec)
在 my.cnf 中 [mysqld] 下设置 innodb_file_per_table=0 也可以关闭独立表空间