ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL是怎样运行的——第八章

2022-02-01 13:31:28  阅读:195  来源: 互联网

标签:文件 数据库 文件系统 第八章 空间 MySQL test 日志 怎样


这一章主要是探讨一下和文件系统有关的内容

8.1

InnoDB、MyISAM 这样的存储引擎其实都是把数据存储在文件系统上。
接下来的例子都是MySQL 5.7.22版本的

8.2

MySQL服务器程序启动时,会到文件系统的某个目录下加载一些程序。运行过程中产生的数据也会存储到这个目录下的某些文件中。
这个目录具体位置与系统变量datadir有关。可以这样查看:

show variables like 'datadir';

8.3

我们创建的每个数据库都会对应一个datadir目录下的文件夹。而这个文件夹里有一个名为db.opt的文件。这个文件里包含了数据库的一些属性,比如数据库的字符集和比较规则

表的信息可以分为两种,分别是表结构的定义和表内的实际数据。
当我们在数据库下创建一个名为test的表之后,数据库对应的文件夹里就会多一个名为test.frm的文件。
这个文件是二进制的,用于描述表的结构。

而在表内实际数据方面,不同引擎的规则是不一样的。
在InnoDB中,我们有表空间这个抽象的概念。
表空间可以对应文件系统上一个或多个真实文件。每一个表空间可以被划分为很多个页,表数据就存放在这些页中。

表空间分为很多种。

系统表空间

可以对应一个或多个真实的文件。默认情况下,会在datadir目录下创建一个名为ibdata的,大小为12M,可以自动扩容的文件。
如果我们想自己指定多个文件,或者指定不同的文件名,可以这样设置:

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

这样在mysql启动后就会创建两个512mb的文件作为系统表空间。
在一个mysql服务器中,表空间只有一份。在5.5.7到5.6.5之间的版本中,数据会存放到这个表空间里。

独立表空间

在5.6.6及以后的版本中,InnoDB为每个表都会创建一个表空间。表空间对应一个表名.ibd格式的文件。这个文件在数据库文件夹下。表中的数据就在表空间文件里。
以刚才的test表为例,数据库文件夹下会有test.frm和test.ibd两个文件。

当然,我们也可以把数据存到系统表空间里去,对于将要创建的表,我们可以修改配置文件:

[server]
innodb_file_per_table=0

对于老的表,我们可以这样:

alter table 表名 tablespace innodb_file_per_table;
alter table 表名 tablespace innodb_system;

其他表空间

还有很多表空间,以后涉及到再介绍,比如通用表空间、undo表空间、临时表空间等等。

MyISAM的方案

之前都是innodb下的方案。对于myisam来说,数据和索引是分开存储的。都会生成对应的文件。以test表为例,会在数据库文件夹中出现

test.frm
test.MYD
test.MYI

三个文件,分别代表表结构、表数据、索引。

其他文件

还有一些别的文件

  • 服务器进程文件:每运行一个MySQL服务器程序,都会启动一个进程。MySQL服务器会把自己的进程ID写到文件中
  • 服务器日志文件:在服务器运行期间,会产生各种各样的日志。比如查询日志、错误日志、二进制日志、redo日志等。这些日志各有各的用途。
  • SSL和RSA证书、秘钥文件:安全通信用

8.4

文件系统对数据库文件是有约束的。比如

  • 数据库和表的名称不能超过文件系统允许的最大长度。
  • 特殊字符会被转义。文件名里只能允许字母和数字。标点符号会被转成@+编码值的形式。
  • 文件长度受文件系统最大长度的限制。

8.5

简单介绍一下系统数据库

  • mysql:存储用户账户和权限信息、存储过程和事件的定义、运行过程中产生的日志、帮助信息等
  • information_schema:mysql服务器维护的其他数据库的信息,比如有哪些表、视图、触发器、列等等。就是存放元数据的。
  • performance_schema:存储状态信息,用于性能监控的。
  • sys:主要是通过视图的形式把information_schema和performance_schema结合起来。

标签:文件,数据库,文件系统,第八章,空间,MySQL,test,日志,怎样
来源: https://blog.csdn.net/Ning862217083/article/details/122763577

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有