vlambda博客
学习文章列表

Mysql【四】Mysql数据库与InnoDB存储引擎表的各种类型文件


引言

本篇将分析学习构成Mysql数据库和InnoDB存储引擎表的各种类型文件,具体分为:参数文件、日志文件、套接字文件、pid文件、表结构定义文件、InnoDB存储引擎文件。

1、参数文件

1.1、查看my.cnf文件

mysql --help | grep my.cnf
cat /etc/my.cnf
Mysql【四】Mysql数据库与InnoDB存储引擎表的各种类型文件
my.cnf.png

1.2、查看所有参数

SHOW VARIABLES 
Mysql【四】Mysql数据库与InnoDB存储引擎表的各种类型文件
参数文件.png

2、日志文件

日志文件记录了影响Mysql数据库的各种类型活动。常见的有:

2.1、错误日志

记录了mysql启动、运行、关闭过程。查看错误日志存储的地方:Mysql【四】Mysql数据库与InnoDB存储引擎表的各种类型文件查看错误日志的内容:Mysql【四】Mysql数据库与InnoDB存储引擎表的各种类型文件

2.2、二进制日志

二进制文件记录了对数据执行的所有更改操作,不涉及到select等操作。二进制日志有以下两种作用:

  • 恢复 数据的恢复需要二进制日志。
  • 复制 通过复制和二进制日志,可以使得一台远程的Mysql数据库与一台Mysql数据库进行实时同步,做高可用。

服务器中的二进制文件:Mysql【四】Mysql数据库与InnoDB存储引擎表的各种类型文件这里的mysql-bin.000001为二进制文件,mysql-bin.index为二进制的索引文件,用来存储过往生产的二进制日志序号。如:Mysql【四】Mysql数据库与InnoDB存储引擎表的各种类型文件

2.3、慢查询日志

可以通过慢查询日志,找到有问题的sql,并优化。文件名为:mysql-slow.log 也可以查看mysql库中的slow_log表:

CREATE TABLE `slow_log` (
`start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
`user_host` mediumtext NOT NULL,
`query_time` time(6) NOT NULL,
`lock_time` time(6) NOT NULL,
`rows_sent` int(11) NOT NULL,
`rows_examined` int(11) NOT NULL,
`db` varchar(512) NOT NULL,
`last_insert_id` int(11) NOT NULL,
`insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`sql_text` mediumblob NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log';

2.4、查询日志

查询日志记录了所有对Mysql数据库请求的信息,不论这些请求是否得到了正确的执行。一般查询日志都是关闭的:Mysql【四】Mysql数据库与InnoDB存储引擎表的各种类型文件

3、套接字文件

用于本地连接。Mysql【四】Mysql数据库与InnoDB存储引擎表的各种类型文件

4、pid文件

Mysql实例启动时,会将自己的进程ID写入到pid文件中。

5、表结构定义文件

每张表都有一个结构定义文件,在mysql中以frm为后缀。如,mysql库中的表结构定义文件:Mysql【四】Mysql数据库与InnoDB存储引擎表的各种类型文件

6、InnoDB存储引擎文件

以上介绍的5大类文件,都是Mysql数据库本身的文件,和存储引擎无关,处理那些文件之外,每个表存储引擎还有独自文件, InnoDB中有两类比较重要的文件:表空间文件、重做日志文件。

6.1、表空间文件

InnoDB将存储的数据按表空间进行存放。默认是ibdata1。也可以为每张表单独建立表空间,后缀为.ibd。Mysql【四】Mysql数据库与InnoDB存储引擎表的各种类型文件

6.2、重做日志文件

  • 重做日志文件是InnoDB存储引擎的日志文件,记录了对InnoDB存储引擎的事务日志。
  • 主要用来保数据的完整性,比如宕机时使用重做日志恢复到宕机之前。
  • 重做日志文件名:ib_logfile0、ib_logfile1、ib_logfile2等
6.2.1、重做日志文件与二进制日志文件的区别
  • 二进制日志文件会记录所有与Mysql有关的日志记录,包括各种存储引擎的日志,而重做日志只记录其本身的事务日志。
  • 二进制日志文件记录的是事务的具体操作内容,而重做日志记录的关于每个页(Page)的更改的物理情况。
  • 写入时间不同,二进制日志是在事务提交前进行记录,而重做日志是在事务进行过程中不断的写入。
6.2.2、重做日志的写入时机

在学习上一部分InnoDB存储引擎的架构时,了解了重做日志不是直接写入的,需要从缓冲区刷新写入。重做日志缓冲区写入重做日志的时机为:

  • Master Thread每秒刷新
  • 事务提交时刷新
  • 重做日志缓冲区空间小于二分之一时刷新

通过上面的学习整理,简单的了解了Mysql和Innodb相关的文件,为后期的学习打好基础。