MySQL 数据库文件 详解

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 也可以关闭独立表空间


你可能感兴趣的:(MySQL)