目录
  1. 1、参数文件
    1. 1.1、查看my.cnf文件
    2. 1.2、查看所有参数
  2. 2、日志文件
    1. 2.1、错误日志
    2. 2.2、二进制日志
    3. 2.3、慢查询日志
    4. 2.4、查询日志
  3. 3、套接字文件
  4. 4、pid文件
  5. 5、表结构定义文件
  6. 6、InnoDB存储引擎文件
    1. 6.1、表空间文件
    2. 6.2、重做日志文件
      1. 6.2.1、重做日志文件与二进制日志文件的区别
      2. 6.2.2、重做日志的写入时机
深入了解Mysql【四】Mysql数据库与InnoDB存储引擎表的各种类型文件

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

1、参数文件

1.1、查看my.cnf文件

1
2
mysql --help | grep my.cnf
cat /etc/my.cnf

my.cnf.png

1.2、查看所有参数

1
SHOW VARIABLES

参数文件.png

2、日志文件

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

2.1、错误日志

记录了mysql启动、运行、关闭过程。
查看错误日志存储的地方:
log error.png
查看错误日志的内容:
log error-1.png

2.2、二进制日志

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

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

服务器中的二进制文件:
二进制日志.png
这里的mysql-bin.000001为二进制文件,mysql-bin.index为二进制的索引文件,用来存储过往生产的二进制日志序号。
如:
二进制日志-1.png

2.3、慢查询日志

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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数据库请求的信息,不论这些请求是否得到了正确的执行。
一般查询日志都是关闭的:
查询日志.png

3、套接字文件

用于本地连接。
套接字文件.png

4、pid文件

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

5、表结构定义文件

每张表都有一个结构定义文件,在mysql中以frm为后缀。
如,mysql库中的表结构定义文件:
表结构定义文件.png

6、InnoDB存储引擎文件

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

6.1、表空间文件

InnoDB将存储的数据按表空间进行存放。默认是ibdata1。也可以为每张表单独建立表空间,后缀为.ibd。
InnoDB表空间.png

6.2、重做日志文件

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

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

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

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

tencent.jpg

文章作者: ClawHub
文章链接: https://www.clawhub.club/posts/2019/11/21/%E6%B7%B1%E5%85%A5%E4%BA%86%E8%A7%A3Mysql/%E6%B7%B1%E5%85%A5%E4%BA%86%E8%A7%A3Mysql%E3%80%90%E5%9B%9B%E3%80%91Mysql%E6%95%B0%E6%8D%AE%E5%BA%93%E4%B8%8EInnoDB%E5%AD%98%E5%82%A8%E5%BC%95%E6%93%8E%E8%A1%A8%E7%9A%84%E5%90%84%E7%A7%8D%E7%B1%BB%E5%9E%8B%E6%96%87%E4%BB%B6/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ClawHub的博客
打赏
  • 微信
  • 支付宝
扫一扫关注ClawHub公众号,专注Java、技术分享、面试资源。