14.Mysql的数据目录

1.前言

  这里就会简单的介绍几个概念,以供自己回顾,主要是说一些平时不太注意的细节

2.数据库在文件系统中的表示

  我们在用create dabase db_name创建数据库时,Mysql会帮我们做两件事:

  • 在数据目录下创建一个与数据库名同名的子目录(或者说是文件夹)
  • 在与该数据库名同名的子目录下创建一个名为db.opt的文件。这个文件中包含了该数据库的属性,比如说数据库的字符集和比较规则 
[root@node01xxx]# ls
db.opt  t1.frm  t1.ibd  t2.frm  t2.ibd  tb1.frm  tb1.ibd  test.frm  test.ibd  t.frm  t.ibd
[root@node01 liulin]# cat db.opt
default-character-set=utf8mb4
default-collation=utf8mb4_general_ci

3.innodb是如何存储表结构的

  • innodb其实是使用页为基本单位来管理存储空间,默认页大小是16KB
  • 对于innodb存储引擎来说,每个索引都对应着一个B+树,该B+树的每个节点都是一个数据页。数据页之间没有必要是物理连接的,因为数据页之间有双向链表来维护这些页的顺序。
  • innodb的聚簇索引的叶子节点存储了完整的用户记录,也就是所谓的‘索引即数据,数据即索引’

为了更好管理这些页,innodb的设计者提出了表空间(tablespace)的概念,它可以对应文件系统上一个或多个真实的文件。每一个表空间可以被划分为很多个页,表数据存放在某个表空间下的某些页中。innodb的设计者将表空表空间划分为几种不同的类型,

  (1)系统表空间(system tablespace)

  这个系统表空间可以对文件系统上一个或多个实际的文件。在默认情况下,innodb会在数据目录下创建一个名为ibdata1、大小为12MB的文件,这个文件就是对应的系统表空间在文件系统上的表示。而且这个文件是自动扩展的,也就是当不够用时候它会自己增加文件大小。

  如果想让系统表空间对应文件系统上的多个实际文件,或者仅仅觉得原来的ibdata1这个名难听,那么可以在mysql服务器启动时,配置对应的文件路径以及它们的大小。

[server]
innodb_data_file_path:data1:512M;data2:512M:autoextend

  这样,在Mysql启动之后就会创建data1和data2这两个各自512MB大小的文件作为系统表空间,其中的autoextend表明,如果这两个文件不够用,则会自动扩展data2文件的大小。我们也可以不把系统表空间对应的文件路径配置到数据目录下,设置可以配置到单独的磁盘分区上,这时涉及的启动选项就是innodb_data_file_path和innodb_data_home_dir。

  (2)独立表空间

  在mysql5.6.6以及之后的版本,innodb不再默认把各个表的数据存储到系统表空间中,而是为每个表建立一个独立表空间,也就是说,我们创建了多个表,就有多个独立表空间,在使用独立表空间来存储数据时,会在该表所属数据库对应的子目录下创建一个表示该独立表空间的文件,其文件名和表名相同,只不过添加了一个.ibd扩展名

  • test.frm
  • test.ibd

  其中,test.ibd文件用来存储test表中数据。当然也可以自己指定是使用系统表空间还是独立表空间来存储数据,这个功能由启动项innodb_file_per_table控制  

[server]
innodb_file_per_table=0
当为0时,表示使用系统表空间,当为1时,表示使用独立表空间,不过innodb_file_per_table选项只对新建的表起作用,对已经分配了表空间的表不起作用。

  如果想要把已经存储到系统表空间中的表转移到独立表空间,可以使用下面的语法:

alter table 表名  tablespace  innodb_file_per_table;

  如果想要已经存储到独立表空间的表存储到系统表空间中,可以使用如下语法:

alter table 表名 tablespace  innodb_system;

4.Mysql系统数据库简介

  为了存储Mysql服务器运行过程中所需的信息以及运行状态信息,设计Mysql的大叔设计了下面这些系统数据库:

  • mysql:这个数据库相当重要,它存储了Mysql的用户账户和权限信息,一些存储过程和事件的定义信息,一些运行过程中产生的日志信息、一些帮助信息以及时区信息等。
  • information_schema:这个数据库保存着mysql服务器维护的所有其他数据库的信息,比如有哪些表,哪些视图,哪些触发器,哪些列,哪些索引等。这些信息并不是真实的用户数据,而是一些描述性信息,有时候也被称为元数据。
  • performance_schema:这个数据库主要保存mysql服务器运行过程中的一些状态信息,算是对Mysql服务器的一个性能监控。它包含的信息有统计最近执行了那些语句,在执行过程中的每个阶段都花费了多长时间,内存的使用情况等。
  • sys:这个数据库主要是通过视图的形式把information_schema和performance_schema结合起来,让开发人员更方便地了解Mysql服务器的性能信息。  

  

 

posted on   太白金星有点烦  阅读(87)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
历史上的今天:
2021-02-16 3.axel多线程下载

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示