数据库mysqlJava 进阶Java

mysql原理(五)主要文件说明

2021-05-13  本文已影响0人  我犟不过你

一、套接字文件

在UNIX系统下本地连接Mysql可以使用套接字的形式,需要一个sockt文件,该文件使用如下方式查看位置:

mysql> show variables like 'socket';
+---------------+---------------------------+
| Variable_name | Value                     |
+---------------+---------------------------+
| socket        | /var/lib/mysql/mysql.sock |
+---------------+---------------------------+
1 row in set (0.01 sec)

二、pid文件

当mysql实例启动时,会将自己的pid写入文件,由以下参数控制,默认为hostname.pid.

mysql> show variables like 'pid_file';
+---------------+--------------------------------------------+
| Variable_name | Value                                      |
+---------------+--------------------------------------------+
| pid_file      | /var/lib/mysql/iZ2ze7sn66bchxncut8rgsZ.pid |
+---------------+--------------------------------------------+
1 row in set (0.01 sec)

三、表结构定义文件

mysql数据的存储是根据表进行的,每个表都有与之对应的文件。无论何种的存储引擎,都会有一个frm为后缀的文件,记录了该表的结构定义。视图同样会记录到frm文件中,可以使用cat 命令查看。

mysql8中删除了frm文件,并采用 Serialized Dictionary Information (SDI), 是MySQL8.0重新设计数据词典后引入的新产物,并开始已经统一使用InnoDB存储引擎来存储表的元数据信息。SDI信息源记录保存在ibd文件中。官方提供了一个工具叫做ibd2sdi,在安装目录下可以找到,可以离线的将ibd文件中的冗余存储的sdi信息提取出来,并以json的格式输出到终端。

四、InnoDB存储引擎文件

4.1 表空间文件

InnoDB采用将数据存储在表空间(tablespace)的设计。默认配置下会有一个默认为10M,名称为ibdata1的文件,是默认的表空间文件。如下可查看:

mysql> show variables like 'innodb_data_file_path';
+-----------------------+------------------------+
| Variable_name         | Value                  |
+-----------------------+------------------------+
| innodb_data_file_path | ibdata1:12M:autoextend |
+-----------------------+------------------------+
1 row in set (0.00 sec)

我使用的mysql8默认是12M,其中含义是默认表空间ibdata1大小12M,当用完,autoextent参数使其自动增加。
表空间可以设置多个,如下所示:

ibdata1:12M;ibdata2:12M:autoextend

如果两个表空间在不同的磁盘上,负载可能被评分,提升整体的性能。

若果设置了innodb_file_per_table参数,会为每个表生成一个默认的独立表空间。

mysql> show variables like 'innodb_file_per_table';
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)

查看mysql5.6的文件:

5.6.png

查看8的文件:


8

如上所示,同样的ibd文件,在8重要更大一些。其中的.ibd文件就是独立表空间文件。该文件仅存储该表的数据,索引以及插入缓冲bitmap等信息。8中还包含了表结构的sdi文件。

4.2 重做日志文件

在默认情况下,在mysql的安装路径下会有两个文件;ib_logfile0和ib_logfile1。官方定义为存储引擎的日志文件,其实就是我们日常所说的重做日志文件(redo log file)。它们记录了存储引擎的事务日志信息。用于解决服务器宕机导致数据丢失问题,可以使用redolog进行恢复。每个存储引擎至少有一个重做日志文件组,每个文件组下至少有两个重做日志文件。如之前说的两个文件。

可以设置多个日志组,保证数据的可靠性。每个日志组下的两个文件大小相同,循环写入数据,当一个文件写满后,切换到另一个文件。

主要参数:

mysql> show variables like  '%innodb_log_%';
+------------------------------------+----------+--------------------------------------------------+
| Variable_name                      | Value    |                            描述                  |
+------------------------------------+----------+--------------------------------------------------+
| innodb_log_buffer_size             | 16777216 |写入磁盘上日志文件的缓冲区的大小(以字节为单位)。默认值为16MB。
| innodb_log_checksums               | ON       |重做日志页校验参数
| innodb_log_compressed_pages        | ON       |
| innodb_log_file_size               | 50331648 |日志组内总文件的大小,略小于512G。该数值过大,将导致数据恢复慢;过小可能导致checkpoint触发日志刷入磁盘,增加io。
| innodb_log_files_in_group          | 2        |组内日志文件数量,默认是2.
| innodb_log_group_home_dir          | ./       |文件路径
+------------------------------------+----------+--------------------------------------------------+
10 rows in set (0.00 sec)

上一篇下一篇

猜你喜欢

热点阅读