MySQL系统文件目录、数据文件目录

MySQL系统文件目录

MySQL文件路径
MySQL系统文件目录、数据文件目录_第1张图片

MySQL数据库配置文件读取顺序

  1. /etc/my.cnf
  2. /etc/mysql/my.cnf
  3. /usr/local/mysql/etc/my.cnf
  4. ~/.my.cnf

MySQL数据库会以读取到的最后一个配置文件中的参数为准

数据库系统表

  • mysql (基本信息如用户、时区)

    MySQL 系统自带的核心数据库,它存储了MySQL的用户账户和权限信息,一些存储过程、事件的定义信息,一些运行过程中产生的日志信息,一些帮助信息以及时区信息等。

  • information_schema (数据库元数据和内部系统表)

    MySQL 系统自带的数据库,这个数据库保存着MySQL服务器 维护的所有其他数据库的信息 ,比如有 哪些表、哪些视图、哪些触发器、哪些列、哪些索引。这些信息并不是真实的用户数据,而是一些 描述性信息,有时候也称之为 元数据 。在系统数据库 information_schema 中提供了一些以 innodb_sys 开头的表,用于表示内部系统表。

  • performance_schema (数据库运行状态表)

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

  • sys(系统信息表和状态表的视图)

    sys是 视图 的形式把 information_schema 和 performance_schema 结合起来,帮助系统管理员和开发人员监控 MySQL 的技术性能。

MySQL数据文件目录

查看数据目录

MySQL系统文件目录、数据文件目录_第2张图片

关于数据文件的组成,5.7 和8.0有较大的不同

MySQL5.7 数据文件

  • 独立表空间:opt(数据库信息) + frm + ibd
  • 共享表空间(默认):ibdata1 + frm
  • MyIsam:frm + myd + myi

MySQL系统文件目录、数据文件目录_第3张图片

  • ibdata默认的文件内容:元数据、undo日志、修改buffer和双写buffer
  • db.opt

用来保存数据库的配置信息,如该数据库默认字符集编码和字符集排序规则。如果创建数据库时指定了字符集和排序规则,后续创建的表没有指定字符集和排序规则,那么该表将采用db.opt文件中指定的属性。

对于InnoDB表,如果是独立的表空间,数据库中的表结构以及数据都存储在数据库的路径下(而不是共享表空间ibdata1文件中)。但是数据中的其他对象,包括数据被修改之后,事务提交之间的版本信息,仍然存储在共享表空间的ibdata1文件中。

  • .frm

在MySQL中建立的任何一张数据表,其对应的数据库目录下都会有该表的.frm文件。.frm文件用来保存每个数据表的元数据(meta)和表结构等信息,数据库崩溃时,可以用.frm文件恢复表结构。

.frm文件跟存储引擎无关,任何存储引擎的数据表都有.frm文件,命名方式为 表名.frm.

MySQL 8.0 版本开始,frm 文件被取消,MySQL 把文件中的数据都写到了系统表空间。通过利用 InnoDB 存储引擎来实现表 DDL 语句操作的原子性(在之前版本中是无法实现表 DDL 语句操作的原子性的,如 TRUNCATE 无法回滚)

  • .ibd(ib-file set)

对于InnoDB存储引擎的数据表,一个表对应两个文件:一个是*.frm,存储表结构信息;一个是*.ibd,存储表中数据。.

ibd和.ibdata:.ibd和.ibdata都是专属于InnoDB存储引擎的数据文件。当采用共享表空间时,所有InnoDB表的数据均存放在.ibdata中。所以当表越来越多时,这个文件会变得很大;相对应的.ibd就是采用独享表空间时InnoDB表的数据文件。

  • MYD 和 .MYI(这里提一下MyISAM引擎)

    • .frm 同样保存每个数据表的元数据(meta)和表结构等信息;

    • .MYD理解为MyData,用于存放MyISAM表的数据;

    • .MYI理解为MyIndex,主要存放MyISAM表的索引及相关信息。

MySQL8.0 数据文件

  • 独立表空间(默认):只有ibd文件,包括表结构和表数据
  • 共享表空间:所有数据都在ibdata1文件
[root@localhost mysql-8.0]# cd /var/lib/mysql
[root@localhost mysql]# ls
auto.cnf       binlog.index       ibtmp1              performance_schema
binlog.000001  ca-key.pem         #innodb_redo        private_key.pem
binlog.000002  ca.pem             #innodb_temp        public_key.pem
binlog.000003  client-cert.pem    learn_mysql         server-cert.pem
binlog.000004  client-key.pem     localhost-slow.log  server-key.pem
binlog.000005  #ib_16384_0.dblwr  mysql               sys
binlog.000006  #ib_16384_1.dblwr  mysql.ibd           test
binlog.000007  ib_buffer_pool     mysql.sock          undo_001
binlog.000008  ibdata1            mysql.sock.lock     undo_002

[root@localhost mysql]# cd learn_mysql 
[root@localhost learn_mysql]# ls
class.ibd  s1.ibd  s2.ibd  student.ibd  teacher.ibd
mysql> set global innodb_file_per_table = off;
Query OK, 0 rows affected (0.00 sec)

mysql>  show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | OFF   |
+-----------------------+-------+

# 设置共享表空间后,创建数据库和表,进入数据文件空空如也
[root@localhost mysql]# cd test1;
[root@localhost test1]# ls
[root@localhost test1]# 

你可能感兴趣的:(数据库,mysql)