美文网首页
深度解析:MySQL数据库文件

深度解析:MySQL数据库文件

作者: 零点145 | 来源:发表于2019-07-25 14:17 被阅读0次

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数据库文件

      本文链接:https://www.haomeiwen.com/subject/iclhrctx.html