mysql原理(五)主要文件说明
一、套接字文件
在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)