MySQL与Oracle一样都是通过逻辑存储结构来管理物理存储结构,即管理硬盘上存储的各种文件。下面将详细介绍InnoDB存储引擎中的数据文件和重做日志文件。
一、数据文件
“.ibd”文件和ibdata文件 这两种文件都是存放Innodb数据的文件,之所以有两种文件来存放Innodb的数据(包括索引),是因为 Innodb 的数据存储方式能够通过配置来决定是使用共享表空间存放存储数据,还是独享表空间存放存储数据。
视频讲解如下:
提示:当使用innodb存储引擎时,如果再配置文件中没有配置innodb_file_per_table,默认情况下,所有库中的所有使用innodb存储引擎的表示数据都存在‘ibdata1’这个文件中,表的数据信息和索引信息都存储在ibdata1中,但是如果开启了innodb_file_per_table参数,表示每个innodb表类型的表使用单独的表空间数据文件。
二、重做日志文件(redo log)
redo log是InnoDB存储引擎层生成的日志,主要为了保证数据的可靠性和事务的持久性。视频讲解如下:
每个redo log默认的大小是1G,由参数“innodb_log_file_size”参数决定。
mysql> show variables like "innodb_log_file_size"; # 输出的信息如下: +----------------------+------------+ | Variable_name | Value | +----------------------+------------+ | innodb_log_file_size | 1073741824 | +----------------------+------------+
而redo log文件存放的路径由参数“innodb_log_group_home_dir”决定。
mysql> show variables like "innodb_log_group_home_dir"; # 输出的信息如下: +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | innodb_log_group_home_dir | ./ | +---------------------------+-------+
redo log文件与MySQL的数据文件默认存放在同一个目录下。通过下面方式可以进行查看:
[root@mysql11 data]# pwd /usr/local/mysql/data [root@mysql11 data]# ll ib_logfile* -rw-r-----. 1 mysql mysql 1073741824 Feb 20 20:11 ib_logfile0 -rw-r-----. 1 mysql mysql 1073741824 Feb 19 11:22 ib_logfile1 # 这里可以看到有两个ib_logfile开头的文件,它们就是log group中的redo log file。
MySQL与Oracle一样都采用重做日志组的方式来管理redo log。一个组内由多个大小完全相同的redo log file组成,组内redo log file的数量由变量 “innodb_log_files_group”决定,默认值为2。
mysql> show variables like "innodb_log_files_in_group"; # 输出的信息如下: +---------------------------+-------+ | Variable_name | Value | +---------------------------+-------+ | innodb_log_files_in_group | 2 | +---------------------------+-------+